opengl纹理贴图,全白

willhavhad 2014-11-11 10:31:24
新人刚学opengl纹理贴图,照着红宝书最简单的例子敲了进去,例子是个将棋盘格纹理贴到两个四边形上。
可我贴出来结果是全白的。。。
各位前辈帮帮忙。。。
...全文
328 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lane_L 2014-12-02
  • 打赏
  • 举报
回复
我测试的和你的结果一致. 有解决吗?
赵4老师 2014-11-11
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。 使用驱动精灵软件升级显卡驱动?
willhavhad 2014-11-11
  • 打赏
  • 举报
回复
附上代码。。。和书上一样啊

#include<gl\gl.h>
#include<gl\glu.h>
#include<gl\glut.h>
#include<iostream>
using namespace std;

#define checkImageWidth 64
#define checkImageHeight 64
GLubyte checkImage[checkImageHeight][checkImageWidth][4];
GLuint texName;

void makeCheckImage(){
	int i, j, c;
	for (i = 0; i < checkImageHeight; i++){
		for (j = 0; j < checkImageWidth; j++){
			c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0)) * 255;
			checkImage[i][j][0] = (GLubyte)c;
			checkImage[i][j][1] = (GLubyte)c;
			checkImage[i][j][2] = (GLubyte)c;
			checkImage[i][j][3] = (GLubyte)255;
		}
	}
	//for (i = 0; i < checkImageHeight; i++){
	//	for (j = 0; j < checkImageWidth; j++){
	//		checkImage[i][j][0] = 255;
	//		checkImage[i][j][1] = 1;
	//		checkImage[i][j][2] = 1;
	//		checkImage[i][j][3] = 255;
	//	}
	//}

}

void init(){
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glShadeModel(GL_FLAT);
	glEnable(GL_DEPTH_TEST);
	//glEnable(GL_TEXTURE_2D);
	makeCheckImage();
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

	glGenTextures(1, &texName);
	glBindTexture(GL_TEXTURE_2D, texName);

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);

	//glDisable(GL_TEXTURE_2D);
}

void display(){
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glEnable(GL_TEXTURE_2D);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
	glBindTexture(GL_TEXTURE_2D, texName);
	glBegin(GL_QUADS);
	glTexCoord2d(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
	glTexCoord2d(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
	glTexCoord2d(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
	glTexCoord2d(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
	
	
	glTexCoord2d(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
	glTexCoord2d(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
	glTexCoord2d(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
	glTexCoord2d(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);

	glEnd();
	glFlush();
	glDisable(GL_TEXTURE_2D);

}

void reshape(int w, int h){
	glViewport(0, 0, (GLsizei)w, (GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 30.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glTranslatef(0.0, 0.0, -3.6);
}

int main(){
	init();
	glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_SINGLE);
	glutInitWindowSize(500, 500);
	glutInitWindowPosition(500, 200);
	glutCreateWindow("texture2d");
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	//glutKeyboardFunc(keyboard);

	glutMainLoop();
}
再附上结果图:
赵4老师 2014-11-11
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
willhavhad 2014-11-11
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
搜网络教程“学OpenGL编3D游戏”。 使用驱动精灵软件升级显卡驱动?
驱动精灵看过了,没有需要更新的显卡驱动。可能不是显卡问题吧这个代码放到我一同学电脑上也不行。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧