[程式] GLSL的shader套用
關於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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章