ThaiGameDevX - Thai Game Developers eXchange Forums
27 September 2017, 08:36:34 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: หากมาครั้งแรก เชิญอ่าน ประกาศเจตนารมณ์ของ ThaiGameDevX และ กติกา ข้อตกลงในการใช้เว็บบอร์ด ครับ
 
   Home   Help Search Calendar Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: พี่ครับผมจะตรวจสอบการชนกันของวัตถุได้อย่างไรครับพี่  (Read 4846 times)
0 Members and 1 Guest are viewing this topic.
PCSoft2029
Newbie
*

จำนวน ชม/ไม่พอใจ: +0/-0
Offline Offline

Posts: 12


« on: 15 March 2007, 09:38:24 PM »

สวัสดีครับ ผมเด็กใหม่ครับเพิ่งสมัคเป็นสมาชิกครับ ผมก็เริ่มปัญหาที่สงสัยเลยแล้วกันน่ะครับ คือว่าผมเพิ่งหัดใช้ DirectX ใหม่ๆ แบบสดๆเลยครับ และมาติดตรงการตรวจสอบว่าวัตถุนั้นๆมันชนกันหรือไม่ โดยผมโหลดไฟล์ x มาสองวัตถุครับ และให้มันเลื่อนเข้าหากัน แต่ผมจะรู้ได้อย่างไรว่ามันชนกันแล้วจะตรวจสอบอย่างไรครับ

จะขอบคุณเป็นอย่างสูงครับ
Logged
pppstudio
Approved Member
Full Member
*

จำนวน ชม/ไม่พอใจ: +9/-2
Offline Offline

Gender: Male
Posts: 201



WWW
« Reply #1 on: 15 March 2007, 10:03:29 PM »

ก็ลอง กำหนด รัศมีของแต่ละอัน แล้วถ้ามันไกล้กัน << รัศมีมันทับกันก็
ชนกันไงครับ วิธีง่ายที่สุดเลย

ถ้า A รัศมี 20
ฺB รัศมี 10
ถ้า A ใกล้ B เกิน 30 ก็ชนกัน หาระยะห่างธรรมดา

วิธีที่ 2 เอากล่องสี่เหลี่ยมครอบแต่ละวัตถุ แล้วเช็คว่ากล่องมันซ้อนกับกล่องของ
อีกวัตถุหรือเปล่า ถ้าซ้อนก็ชน

วิธีที่ 3 เช็คโดยเอา polygon ของวัตถุ A กับ B เทียบกันทุก polygon ว่ามันเสียบกัน
อยู่หรือเปล่า ถ้าเสียบก็ชน

ให้เรียง ตามนี้นะครับ ถ้าจะทำแบบนี้ 1-2-3 เพราะถ้าจะเช็ค polygon ก็ต้องหาก่อนว่า
1>มันใกล้กันมากพอที่จะเช็คว่า สี่เหลี่ยมที่ครอบจะซ้อนกัน
2>polygon ที่อยู่ภายในกล่องสี่เหลี่ยมมีโอกาสจะเสียบกัน โดยเช็คจากกล่องว่ามันซ้อนกันอยู่
3>เอา Polygon ที่อยู่ใน สี่เหลี่ยมมาเช็ค

ปล.ส่วนใหญ่ผมใช้ วิธีที่ 2 วิธีเดียว
Logged

Thaina
Approved Member
Hero Member
*

จำนวน ชม/ไม่พอใจ: +29/-83
Offline Offline

Gender: Male
Posts: 810



« Reply #2 on: 15 March 2007, 10:13:32 PM »

ส่วนใหญ่ ผมใช้วิธีแรกที่คุณ P ใช้ครับ

เขียนเป็นฟังค์ชั่น Dist เลย ถ้า 2D ก็ใช้ปีทากอรัส ถ้า 3D ก็ใช้ใช้ยูคลิเดี้ยน
แล้วถ้าวัตถุมันไม่กลม ก็แบ่งเป็นส่วนๆ

แต่ถ้าวัตถุมันเหลี่ยมผมก็ใช้วิธีกล่องครับ
Logged
BA
Approved Member
Sr. Member
*

จำนวน ชม/ไม่พอใจ: +25/-3
Offline Offline

Gender: Male
Posts: 418


เหยียบพื้น มองฟ้า ก้มลงมา ใช่ผืนฟ้า จะสวยกว่าดิน


WWW
« Reply #3 on: 16 March 2007, 06:38:58 PM »

if (mx+smx>x-sx && mx-smx<x+sx && my+smy>y-sy && mysmy<y+sy)

mx คือตำแหน่งเรา
smx คือขนาดของเรา
my คือตำแหน่งเรา
smy คือขนาดของเรา
x คือตำแหน่งศัตรู
sx คือขนาดศัตรู
y คือตำแหน่งศัตรู
sy คือขนาดศัตรู

แต่ขนาดเป็น ครึ่งนึงนะ เพราะ x,y จะได้เป็น center

(int)(Math.sqrt(Math.pow((double)(Math.abs(mx-x)),2)+Math.pow((double)(Math.abs(my-y)),2)))<rm+r

rm ขนาด r ของตัวเรา
r ขนาด r ของศัตรู

ดูก็รู้ว่าเป็น java ใช่ป่ะ หมดกันๆ

Logged

Browny Application

เหยียบพื้น มองฟ้า ก้มลงมา ใช่ผืนฟ้า จะสวยกว่าดิน
DDTmanSP
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +0/-0
Offline Offline

Gender: Male
Posts: 95


โปรแกรมเมอร์สายสะเตร๊ง


« Reply #4 on: 02 June 2008, 12:12:36 AM »

วัตถุ ชนกับวัตถุ ลองไล่เปิดกระทู้ดู คิดว่าเข้าใจดีแล้วครับ  แต่ยังไม่ทราบเรื่อง "วัตถุ ชนกับ ฉาก" เลย

เช่น เกมขับรถน่ะครับ วัตถุตัวละครก็เป็นโมเดลรูปรถ ส่วนฉากต่างๆจะมีสภาพภูมิประเทศอาจเป็นพื้นยกระดับ ที่เมื่อขับรถไปโดน ก็ชน รถจะต้องไปต่อไม่ได้ ไม่ใช่ทะลุกำแพงเลยซะง้ั้น  Smiley

และก็สงสัยอีกเรื่องครับ เกมทั่วๆไป โมเดลรูปคนนี่ การตรวจสอบการชน ใช้วิธีกล่องสี่เหลี่ยมครอบง่ายสุดหรือเปล่าครับ ? ไม่งั้นจะหาจุดกึ่งกลางของวัตถุได้อย่างไรล่ะ
Logged

Job Level 1. Exp 99%
yod
Global Moderator
Hero Member
*****

จำนวน ชม/ไม่พอใจ: +150/-15
Offline Offline

Posts: 3,240


WWW
« Reply #5 on: 02 June 2008, 02:19:53 AM »

Q:เรื่อง "วัตถุ ชนกับ ฉาก"

A: ใช้ ray collision plane ครับ

Q:ใช้วิธีกล่องสี่เหลี่ยมครอบง่ายสุดหรือเปล่าครับ ?

A: sphere ง่ายสุด

Q:จะหาจุดกึ่งกลางของวัตถุได้อย่างไรล่ะ

A:เอาตำแหน่งที่ยืนนั่นล่ะครับ
Logged

..
mingpukja
Guest
« Reply #6 on: 03 June 2009, 05:15:03 AM »

น่าสนใจมากคับ
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!