游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3534|回复: 3

关于 《学OpenGL编3D游戏》中代码的问题

[复制链接]

3

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2005-7-11 12:13:00 | 显示全部楼层 |阅读模式
书中 画 特殊树 一章
在代码中对树的大小进行设置
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:49:00 | 显示全部楼层

树的大小在这里确定

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);  // 切换缓冲区
}

3

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2005-7-12 09:08:00 | 显示全部楼层

Re: 树的大小在这里确定

cqtml: 树的大小在这里确定

float size=4.0f+rand()%4;//大小2-4随机,树的大小在这里确定
float h=-size/10; //深浅

m_baiscobj->ShowTree(x,z,size,h,cactus); //显示树


画树的函数是:
void baiscobj::ShowTree(float x,float z,float h,float s,int cactus)
{
     …………………………………………
     float mat[16];
     glGetFloatv(GL_MODELVIEW_MATRIX, mat);
    vector3_t X(mat[0], mat[4], mat[8]);
  vector3_t Z(mat[1], mat[5], mat[9]);
…………………………………………………………
vector3_t pos(x,0.0,-z);
  pos.y = GetHeight(x, -z) + h + s;
  glBegin(GL_QUADS);
         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);//左上点

这样是确定了树的大小

但是如果我有树的 4个点的坐标
用这个方法似乎不行了啊

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-7-12 22:13:00 | 显示全部楼层

Re:关于 《学OpenGL编3D游戏》中代码的问题

这里的树是一个正方形,一个量就可以描述了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 10:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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