游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2162|回复: 4

我有个2个非常初级的问题……

[复制链接]

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2008-7-15 12:44:00 | 显示全部楼层 |阅读模式
1
我现在有这么一个函数
它的作用是绘制一个模型
当然这段元代码不是我写的……
这个函数可以让模型转向
loat rx, float ry, float rz是转向的角度,例如rz=90的话模型就会竖起来
现在我的问题是
这个模型在(x1,y1,z1)这个点
要让它面向(x2,y2,z2)
请问我应该怎么做?
或者说怎么把向量转为角度?

  1. void CLoadNJ::ShowACMD(unsigned long ACMID, float tx, float ty, float tz, float rx, float ry, float rz, float size)
  2. {
  3.         unsigned long *pHeader;        // 创建文件头
  4.         pHeader = (unsigned long*)ACMD.pData;                // 指向文件头

  5.         if(ACMID<pHeader[0])
  6.         {
  7.                 if((ACMD.pData+pHeader[ACMID])[0] == 'A' && (ACMD.pData+pHeader[ACMID])[1] == 'C' && (ACMD.pData+pHeader[ACMID])[2] == 'M')
  8.                 {
  9.                         glPushMatrix();

  10.                         glTranslatef(tx,ty,tz);       

  11.                         glRotatef(rx, 1.0f, 0.0f, 0.0f);
  12.                         glRotatef(ry, 0.0f, 1.0f, 0.0f);
  13.                         glRotatef(rz, 0.0f, 0.0f, 1.0f);

  14.                         glScaled(size,size,size);
  15.                        
  16.                         ReadACM(ACMD.pData+pHeader[ACMID]);        // 读取ACM块
  17.                        
  18.                         glPopMatrix();
  19.                 }
  20.         }

  21. }
复制代码


2
已知(x0,y0,z0)方向上过点(x1,y1,z1)的直线
求这条直线上与(x1,y1,z1)相距l的点的坐标
求这个问题的代码

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-7-15 17:18:00 | 显示全部楼层

Re:我有个2个非常初级的问题……

第一题,难道这个就是传说中的要用UnProject来事先的情况?

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-7-16 14:43:00 | 显示全部楼层

Re:我有个2个非常初级的问题……

汗~
首先,你需要确认你的模型当前指向的方向,假设是V_orig
设希望它指向的方向为V_dst

现在你已经获得了以上两个向量,根据你函数中的旋转顺序,你需要先求出这两个向量绕x轴正方向旋转的角度Ax
再计算两个向量绕y轴正方向旋转的角度Ay, 最后计算Az

至于如何计算,举个例子,如果要计算Ax, 则(以下为伪代码,假设已经实现了向量类vec3):
vec3 v1 = V_orig;
vec3 v2 = V_dst;

//求两个向量在YZ平面上的投影
v1.x = 0.0;
v2.x = 0.0;

float cosAx = dot(v1, v2) / v1.length * v2.length; //根据数学公式 cosθ = (v1·v2) / (|v1| *|v2|)
float Ax = acos( cosAx ) * 180.0 / 3.1415926;  //求出角度值

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-7-16 14:47:00 | 显示全部楼层

Re:我有个2个非常初级的问题……

第二个问题

设所求的点为x2, y2, z2,则:

x2 = x1 + x0 * l;
y2 = y1 + y0 * l;
z2 = z1 + z0 * l;

建议楼主弄本立体几何看看

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-7-16 16:19:00 | 显示全部楼层

Re:我有个2个非常初级的问题……

多谢楼上2位指导
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 23:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表