ThaiGameDevX - Thai Game Developers eXchange Forums
27 September 2017, 08:38:39 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: อยากได้สูตรคำนวน การ Rotate Object ให้ สัมพันธ์ กับกล้องอ่ะครับ  (Read 2834 times)
0 Members and 1 Guest are viewing this topic.
bayofxyz
Approved Member
Jr. Member
*

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

Gender: Male
Posts: 51



« on: 21 July 2011, 07:42:22 AM »

สมมตินะครับ

มี Object 1 ชิ้น ผมต้องการจะ Rotate มัน

โดยที่ เมื่อคลิกขวา แล้ว
เลื่อนเมาส์ขึ้นลง จะเป็นการ Rotate ขึ้นลง
เลื่อนเมาส์ซ้ายขวา จะเป็นการ Rotate ซ้ายขวา

ทีนี้ปัญหาของผมคือ เมื่อหมุนไปทางซ้าย (Rotate แกน Y ในโปรแกรมองผม) แล้ว หมุนขึ้น (Rotate แกน X ในโปรแกรมของผม) ปัญหาที่เกิดขึ้นคือไม่หมุนไปตามทิศทางที่ต้องการ(คือหมุนขึ้น) แต่มันดันหมุนเฉียงๆ(เพราะมันหมุนเฉพาะแกน X ที่จริงมันควรจะหมุนที่แกน Z ด้วย) คือถ้าไม่เข้าใจเดี๋ยวเอารูปอธิบายให้อีกทีนะครับ
« Last Edit: 21 July 2011, 08:07:23 AM by bayofxyz » Logged

Plus Pingya
Approved Member
Full Member
*

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

Gender: Male
Posts: 228


Plus Pingya


WWW
« Reply #1 on: 21 July 2011, 04:43:33 PM »

ใบ้หวยให้ว่า.. ต้องลองกลับไปทบทวนตรีโกณมิติ..
ผมจำได้ว่าอะไรเทือกๆนั้น แต่จำรายละเอียดลึกๆไม่ได้ เกี่ยวกับพวก sin cos tan อะครับ
Logged

AUT
Approved Member
Jr. Member
*

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

Posts: 92


WWW
« Reply #2 on: 22 July 2011, 04:02:56 AM »

ทำมุมกล้องแบบไหนครับแบบ Ragnarok หรือเกมแนวไหนครับจะได้นึกภาพออก
Logged

www.siamtip.com
DirectX9.0c for Delphi & VC++
centino
Approved Member
Jr. Member
*

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

Posts: 65


« Reply #3 on: 22 July 2011, 09:11:45 PM »

................... ผมอ่านไม่ดีเอง
« Last Edit: 24 July 2011, 09:00:56 PM by centino » Logged

bayofxyz
Approved Member
Jr. Member
*

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

Gender: Male
Posts: 51



« Reply #4 on: 24 July 2011, 09:43:05 AM »

คือเรื่องมุมกล้องน่ะ Full 3D เลยครับ แต่ผมต้องการคุมเฉพาะ Object นะครับ ไม่ได้คุมกล้อง ที่ผมต้องการคือ การหมุน Object โดยให้สัมพันธ์กับกล้องคือกล้องอยู่นิ่งๆ ด้วยอ่ะครับ

อ่า สมมติใหม่ รอบนี้เป็นคีย์บอร์ด คุมยานอวกาศด้วย นะครับ เผื่อจะมองภาพง่ายขึ้น
สมมติว่าผมกดปุ่มลูกศรขวา ยานอวกาศจะหันหัวไปทางขวา แล้วพอกดปุ่มลูกศรลง ผมไม่ต้องการให้ยานอวกาศแค่หมุนหัวลงตามทิศที่ยานหมุนไป ผมต้องการให้ยานอวกาศหมุนหัวลงไปในทิศที่กล้องหันหน้าเข้าหาอยู่ อะไรยังเงี้ยอ่ะครับ
Logged

AUT
Approved Member
Jr. Member
*

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

Posts: 92


WWW
« Reply #5 on: 25 July 2011, 12:23:49 AM »

อ่ะพูดง่ายๆคือต้องการให้วัตถุหันหน้าไปในทิศทางเดียวกับทิศที่กล้องมองไปหรือเปล่าครับ ถ้าเป็นแบบนี้ตอนออกแบบคลาสจัดการมุมกล้องต้องเก็บเว็กเตอร์สามมิติของ
Position = ตำแหน่งกล้อง
FocusPoint = จุดโฟกัสของกล้อง
m_Lookvector = เวกเตอร์หนึ่งหน่วยของทิศการมองซึ่ง Direct3D ใช้ระบบพิกัดมือซ้ายดังนั้นจึงมองในแนวแกน Z ด้านบวกเป็น (0,0,1)
ทำการหมุนเวกเตอร์นี้ด้วยเมตตริกซ์จะได้ทิศการมองของกล้องครับด้วยคำสั่ง D3DXVec3TransformNormal
m_RightVector = เวกเตอร์ตั้งฉากกับ Look เวกเตอร์
m_Upvector = (0,1,0)

CFirstPersonCamera::CFirstPersonCamera(D3DXVECTOR3 pos, FLOAT xRot, FLOAT yRot, FLOAT zRot):CCamera()
{
   Angle = D3DXVECTOR3(xRot, yRot, zRot);   
   D3DXMatrixRotationYawPitchRoll(&matRotate, D3DXToRadian(Angle.y), D3DXToRadian(Angle.x), D3DXToRadian(Angle.z));
   D3DXVECTOR3 look = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
   D3DXVECTOR3 right = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
   D3DXVec3TransformNormal(&m_LookVector, &look, &matRotate);
   D3DXVec3TransformNormal(&m_RightVector, &right, &matRotate);
   FocusPoint = Position +m_LookVector*(focusRange-ZoomDistance);
        D3DXMatrixLookAtLH(&matView,&Position, &FocusPoint,&UpVector);
}
จากนั้นให้ทำการ Interpolate ตัววัตถุตามทิศทางการมองของกล้องครับประมาณว่า
D3DXVECTOR3 diff = (camera.m_lookvector-Object.m_lookvector)*fElapsedTime;
Object.m_lookvector+=diff;

Object.FocusPoint = Object.Position + Object.mLookVector*Rotatespeed;

เมื่อ Object.m_lookvector คือทิศการหันหน้าของตัววัตถุ
เวลาหาเมตตริกซ์หมุนตัววัตถุใช้วิธีเดียวกับที่กล้องใช้นะครับ
D3DXMatrixLookAtLH(&matObjectRotate,&Object.Position, &Object.FocusPoint,&UpVector);
Logged

www.siamtip.com
DirectX9.0c for Delphi & VC++
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!