游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4341|回复: 5

平面树的转动是哪里实现的呢?

[复制链接]

7

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2005-6-1 23:01:00 | 显示全部楼层 |阅读模式
没在程序中找到相应的地方,是说就让ry属性为0就可以了吗?


谢谢唐老大,买你的书真值,大家都该买一本珍藏

7

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2005-6-2 11:56:00 | 显示全部楼层

Re:平面树的转动是哪里实现的呢?

还有md2文件使用什么软件制作的呢?
这是最后一个问题的,谢谢斑竹回答
在线急等

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-6-2 14:49:00 | 显示全部楼层

Re:平面树的转动是哪里实现的呢?

void baiscobj:: ShowTree(float x,float z,float h,float s,int cactus)//树
1{ glEnable(GL_BLEND);                                //启用混色
2  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //指定混合的属性。
3  glEnable(GL_ALPHA_TEST);                           //启用透明
4  glAlphaFunc(GL_GREATER, 0);                        //设置透明测试
5  float mat[16];                                     //定义数组保存场景矩阵
6  glGetFloatv(GL_MODELVIEW_MATRIX, mat);             //取得场景矩阵的数据
7  vector3_t X(mat[0], mat[4], mat[8]);               //场景矩阵的X方向矢量
8  vector3_t Z(mat[1], mat[5], mat[9]);               //场景矩阵的Z方向矢量
9  glBindTexture(GL_TEXTURE_2D, g_cactus[cactus]);    //选择树
10 vector3_t pos(x,0.0,-z);                           //树的位置X、Z矩阵变换
11 pos.y = GetHeight(pos.x, pos.z) + h + s;           //树的位置Y分量
12 glBegin(GL_QUADS);                                 //开始绘制四边形
13   glTexCoord2f(0.0,0.0);glVertex3fv((pos+(X+Z)*-h).v);//左下点
14   glTexCoord2f(1.0,0.0);glVertex3fv((pos+(X-Z)* h).v);//右下点
15   glTexCoord2f(1.0,1.0);glVertex3fv((pos+(X+Z)* h).v);//右上点
16   glTexCoord2f(0.0,1.0);glVertex3fv((pos+(Z-X)* h).v);//左上点
17 glEnd();                                          //绘制完成
18 glDisable(GL_ALPHA);                              //关闭透明
19 glDisable(GL_BLEND);                              //关闭透明
20}

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-6-3 10:33:00 | 显示全部楼层

Re:平面树的转动是哪里实现的呢?

我只知道NEHE的旋转的星星那一节是用Rotate来实现的,所有的星星开始的时候是面对着你的,你要是旋转角度的话,他们的角度也跟着旋转。
但是,这种方法针对离视中心较远的星星是不合适的。

我觉得设置一个方向向量比较好,但是不知道OpenGL里面怎么通过向量实现转动。

3

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2005-7-11 12:55:00 | 显示全部楼层

Re: Re:平面树的转动是哪里实现的呢?

cqtml: Re:平面树的转动是哪里实现的呢?

void baiscobj:: ShowTree(float x,float z,float h,float s,int cactus)//树
1{ glEnable(GL_BLEND);    ...



在代码中对树的大小进行设置
glTexCoord2f(0.0,0.0);glVertex3fv((pos+(X+Z)*-h).v);//左下点
glTexCoord2f(1.0,0.0);glVertex3fv((pos+(X-Z)* h).v);//右下点
glTexCoord2f(1.0,1.0);glVertex3fv((pos+(X+Z)* h).v);//右上点
glTexCoord2f(0.0,1.0);glVertex3fv((pos+(Z-X)* h).v);//左上点
似乎是 (X+Z)*-h,(X-Z)* h,(X+Z)* h,(Z-X)* h

而X,Z的3个参数(坐标)是由glGetFloat取得的,事先无法知道数值
glGetFloatv(GL_MODELVIEW_MATRIX, mat);
vector3_t X(mat[0], mat[4], mat[8]);
vector3_t Z(mat[1], mat[5], mat[9]);

那么如何来自主的定义树的大小呢?



42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-7-11 15:45:00 | 显示全部楼层

Re:平面树的转动是哪里实现的呢?

void OpenGL::Render()//OpenGL图形处理
{//////////////////////////////////////////////////////////////////////////
        srand(100);//产生树的固定随机数种子
        for(int i=0;i<300;i++)                                        //树的数量       
        {float x= RAND_COORD((MAP_W-1)*MAP_SCALE);        //位置x
         float z= RAND_COORD((MAP_W-1)*MAP_SCALE);        //位置z
         float size=4.0f+rand()%4;//大小2-4随机,树的大小在这里确定
         float h=-size/10;                                //深浅
         int   cactus=rand()%4+11;                        //树形随机4种   
         m_baiscobj->ShowTree(x,z,size,h,cactus);        //显示树
        }
        m_baiscobj->picter(MAP+10,0,-MAP);        //组合图形1
//////////////////////////////////////////////////////////////////////////
        SwapBuffers(hDC);         // 切换缓冲区
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 08:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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