游戏开发论坛

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

坐标(x ,y, z)和齐次坐标(x,y,z ,1)代表的是一个坐标吧?为什

[复制链接]

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2005-11-9 14:54:00 | 显示全部楼层 |阅读模式
       
一个用齐次坐标表示的光源位置:

float position_light0[] = { 4000.0f, 650.0f, 4100.0f , 1.0f };
glLightfv( GL_LIGHT0, GL_POSITION, position_light0 );





如果把上面的光源位置坐标由4D齐次坐标改由3D坐标表示,就是把最后的1.0f去掉,变成:

float position_light0[] = { 4000.0f, 650.0f, 4100.0f  };

结果效果差别很大,大家知道这是为什么吗?应该4D齐次坐标只是3D坐标的另外一种表示方法呀!

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2005-11-10 12:27:00 | 显示全部楼层

Re:坐标(x ,y, z)和齐次坐标(x,y,z ,1)代表的是一个坐标吧?

很不幸的是,glLightfv( GL_LIGHT0, GL_POSITION, position_light0 );
调用的时候,第三个参数要求必须是齐次坐标.所以当你传入一个3D坐标的时候,OpenGL就会把你数组外的一个垃圾数据当作w,所以就会产生很大的差异.

所以一定要用(x,y,z,w)的形式传入参数.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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