游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1397|回复: 1

[初学求教]一个达不到预期的投影程序

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-10-26 12:36:00 | 显示全部楼层 |阅读模式
“下例通过将立方体投影到平面 y=o,生成一个从光源(xl,yl,zl)到立方体的投影”

按书中例子编程:

所用投影矩阵 m 如下

1    0    0    0
0    1    0    0
0    0    1    0
0  -1/yl  0    0


void display()
{
        glEnable(GL_DEPTH_TEST);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(1.1, 1.1, 1.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
        cube();



//cube为原点中心,边长 2 的六面体,以下为投影代码,xl,yl,zl 设为 3.0

        glPushMatrix();
        glPushAttrib(GL_CURRENT_BIT);
        glTranslatef(xl, yl, zl);
        glMultMatrixf(m);
        glTranslatef(-xl, -yl, -zl);
                                                  //draw shadow in black
        glColor3f(0.0, 0.0 ,0.0);
        cube();
        glPopMatrix();
        glPopAttrib();




        glutSwapBuffers();
}


void reshape(int w, int h)
{
        glViewport(0, 0, w, h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-4.0, 4.0, -4.0, 4.0, -4.0, 4.0);
}


运行得到下边怪图,不知哪里有错误,求教,谢谢 [em4]
sf_2005102612368.jpg

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-10-27 15:07:00 | 显示全部楼层

Re:[初学求教]一个达不到预期的投影程序

方法很简单啊。
先把第一个CUBE语句画取消掉。
glLoadIdentity();
gluLookAt(1.1, 1.1, 1.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//cube();
编译执行,看看只有第二个CUBE的时候是什么样子的。
然后使第一个有效,第二个取消。
glColor3f(0.0, 0.0 ,0.0);
//cube();
glPopMatrix();
glPopAttrib();
便宜执行,看看只有第一个CUBE的时候是什么样子的。

glColor3f(0.0, 0.0 ,0.0);在这里没有效果,很可能是因为
你在定义CUBE的时候已经 定义过顶点的颜色了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 10:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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