作者gotoo (茶楼推点心的)
看板GameDesign
标题[程式] GLSL的shader套用
时间Mon Nov 10 13:26:00 2008
关於shader套用的问题,
小弟想要套用下面网站里的shader,却一直做不出效果,
还请大大们开示。
http://www.ozone3d.net/tutorials/bump_mapping_p4.php
我的code大概如下:
作法是载入两张图到shader,一张是有颜色的,
一张是黑白算normal的。
是不是两张图LoadTexture要写得不一样呢?
还是说display里面挂材质到shader里写错了呢?
卡好几天了 @@
int main(int argc, char** argv) {
// 初始化
...
// 载入shader
LoadShaders();
// 载入两张图
glGenTextures(2, texObject);
LoadTexture(0, "有颜色的材质");
LoadTexture(1, "黑白的计算normal变化的材质");
// callback & mainloop
...
}
void LoadTexture(int textureIndex, char* filename) {
AUX_RGBImageRec* img;
img = auxDIBImageLoadA(filename);
glBindTexture(GL_TEXTURE_2D, texObject[textureIndex]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->sizeX, img->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, img->data);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
void Display() {
// 初始化 & 矩阵设定
...
// 将两张图挂入shader使用
glActiveTextureARB( GL_TEXTURE0_ARB ); //
glBindTexture(GL_TEXTURE_2D, texObject[0]);
GLint location = glGetUniformLocationARB(MyShader, "colorMap");
glUniform1iARB(location, 0);
glActiveTextureARB( GL_TEXTURE1_ARB );
glBindTexture(GL_TEXTURE_2D, texObject[1]);
location = glGetUniformLocationARB(MyShader, "normalMap");
glUniform1iARB(location, 1);
int i,j;
for (i=0;i < object->fTotal;i++)
{
glBegin(GL_POLYGON);
for (j=0;j<3;j++)
{
glMultiTexCoord2fv(GL_TEXTURE0_ARB,
object->tList[object->faceList[i][j].t].ptr);
glNormal3fv(object->nList[object->faceList[i][j].n].ptr);
glVertex3fv(object->vList[object->faceList[i][j].v].ptr);
}
glEnd();
}
// swapbuffer & redisplay
...
}
--
谢谢看完。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.218.120