一晃又好久没发博文了.这个东西就是照亮一个贴了纹理的球球.上次也学到这了,上次是学到HDR的编码部分停下来的.
最近工作累得不可开交,自己总是有事情做,解决了一个又一个问题,弄得我每天很烦.最近又涉及到了多线程共享资源互斥的问题.用处就是在加载资源的第一步是从文件中加载出待解密的资源,对其进行解密.这一步...做项目各种事情,这周写了个基于引擎的组织资源的工具,可以提高组织效率的东西.上午做人物动画部分,做着做着发觉跟另一位程序员的耦合太大.索性委托他去做了.在一个团队里,要想说话有分量,别人听,还是要自己牛逼啊,牛逼别人也愿意听你的.
最近不开心的时候很多,似乎还是喜欢单身的生活,我也苛求女朋友太多了.似乎交女朋友让我有点力不从心,确实每天很累.
// LitTexture.cpp -- 2013/08/22-21:19
#include "stdafx.h"
#include <GLTools.h>
#include <GLMatrixStack.h>
#include <GLFrame.h>
#include <GLFrustum.h>
#include <GLGeometryTransform.h>
#include <StopWatch.h>
#include <math.h>
#define FREEGLUT_STATIC
#include <GL/glut.h>
GLFrame viewFrame;
GLFrustum viewFrustum;
GLTriangleBatch sphereBatch;
GLMatrixStack modelViewMatrix;
GLMatrixStack projectionMatrix;
GLGeometryTransform transformPipeline;
GLShaderManager shaderManager;
GLuint ADSTextureShader;
GLint locAmbient;
GLint locDiffuse;
GLint locSpecular;
GLint locLight;
GLint locMVP;
GLint locMV;
GLint locNM;
GLint locTexture;
GLuint texture;
bool LoadTGATexture(const char *szFileName, GLenum minFilter, GLenum magFilter, GLenum wrapMode)
{
GLbyte *pBits;
int nWidth, nHeight, nComponents;
GLenum eFormat;
// Read the texture bits
pBits = gltReadTGABits(szFileName, &nWidth, &nHeight, &nComponents, &eFormat);
if(pBits == NULL)
return false;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, nComponents, nWidth, nHeight, 0,
eFormat, GL_UNSIGNED_BYTE, pBits);
free(pBits);
if(minFilter == GL_LINEAR_MIPMAP_LINEAR ||
minFilter == GL_LINEAR_MIPMAP_NEAREST ||
minFilter == GL_NEAREST_MIPMAP_LINEAR ||
minFilter == GL_NEAREST_MIPMAP_NEAREST)
glGenerateMipmap(GL_TEXTURE_2D);
return true;
}
void SetupRC(void)
{
glClearColor(0, 0, 0, 1) ;
glEnable(GL_DEPTH_TEST) ;
glEnable(GL_CULL_FACE) ;
shaderManager.InitializeStockShaders();
viewFrame.MoveForward(4.0f) ;
gltMakeSphere(sphereBatch, 1.0, 26, 13) ;
ADSTextureShader = gltLoadShaderPairWithAttributes("ADSTexture.vp", "ADSTexture.fp", 3, GLT_ATTRIBUTE_VERTEX, "vVertex",
GLT_ATTRIBUTE_NORMAL, "vNormal", GLT_ATTRIBUTE_TEXTURE0, "vTexture0");
locAmbient = glGetUniformLocation(ADSTextureShader, "ambientColor");
locDiffuse = glGetUniformLocation(ADSTextureShader, "diffuseColor");
locSpecular = glGetUniformLocation(ADSTextureShader, "specularColor");
locLight = glGetUniformLocation(ADSTextureShader, "vLightPosition");
locMVP = glGetUniformLocation(ADSTextureShader, "mvpMatrix");
locMV = glGetUniformLocation(ADSTextureShader, "mvMatrix");
locNM = glGetUniformLocation(ADSTextureShader, "normalMatrix");
locTexture = glGetUniformLocation(ADSTextureShader, "colorMap");
glGenTextures(1, &texture) ;
glBindTexture(GL_TEXTURE_2D, texture) ;
LoadTGATexture("CoolTexture.tga", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE) ;
}
void ShutdownRC(void)
{
glDeleteTextures(1, &texture) ;
}
void RenderScene(void)
{
static CStopWatch rotTimer ;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
modelViewMatrix.PushMatrix(viewFrame);
modelViewMatrix.Rotate(rotTimer.GetElapsedSeconds() * 10.0f, 0.0f, 1.0f, 0.0f);
GLfloat vEyeLight[] = { -100.0f, 100.0f, 100.0f };
GLfloat vAmbientColor[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat vDiffuseColor[] = { 1.0f, 1.0f, 1.0f, 1.0f};
GLfloat vSpecularColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glBindTexture(GL_TEXTURE_2D, texture);
glUseProgram(ADSTextureShader);
glUniform4fv(locAmbient, 1, vAmbientColor);
glUniform4fv(locDiffuse, 1, vDiffuseColor);
glUniform4fv(locSpecular, 1, vSpecularColor);
glUniform3fv(locLight, 1, vEyeLight);
glUniformMatrix4fv(locMVP, 1, GL_FALSE, transformPipeline.GetModelViewProjectionMatrix()) ;
glUniformMatrix4fv(locMV, 1, GL_FALSE, transformPipeline.GetModelViewMatrix()) ;
glUniformMatrix3fv(locNM, 1, GL_FALSE, transformPipeline.GetNormalMatrix()) ;
glUniform1i(locTexture, 0) ;
sphereBatch.Draw() ;
modelViewMatrix.PopMatrix() ;
glutSwapBuffers() ;
glutPostRedisplay() ;
}
void ChangeSize(int w, int h)
{
if (h == 0)
h = 1 ;
glViewport(0, 0, w, h) ;
viewFrustum.SetPerspective(35.0f, float(w)/h, 1, 100.0f) ;
projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix()) ;
transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix) ;
}
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Lit Texture");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
ShutdownRC();
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



