/***********************************************
* *
* 对NeHeGL.h中框架函数的定义
* *
* *
***********************************************/
#include <windows.h>
#include "glew.h"
#include <stdio.h>
#include <stdarg.h> // Header File For Windows
#include "glaux.h"
#include "NeHeGL.h" // Header File For NeHeGL
#include "MyMath.h"
#include "Camera.h"
#include <stdio.h>
#include <math.h>
#include "CShader.h"
#include "Matrix16.h"
#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment(lib,"glaux.lib")
#pragma comment(lib,"glew32.lib")
#ifndef CDS_FULLSCREEN // CDS_FULLSCREEN Is Not Defined By Some
#define CDS_FULLSCREEN 4 // Compilers. By Defining It This Way,
#endif
#define _ARB_ENABLE true // We Can Avoid Errors
GLuint list;
GLuint base; // Base Display List For The Font
GLuint texture[2]; // Storage For Our Font Texture
GLuint loop; // Generic Loop Variable
extern float g_fps;
//全局变量
GL_Window* g_window;
Keys* g_keys;
Mouse* g_mouse;
Camera* g_camera;
CShader* shader;
extern POINT curPos;
extern POINT oldCurPos;
GLuint tex_target;
float g_mProjection[16] = {0};
float g_mModelView[16] = {0};
float g_mCameraInverse[16] = {0};
CMatrix16 ci;
GLfloat ambient[]={0.2,0.2,0.2,1.0};
GLfloat diffuse[]={0.9,0.9,0.9,1.0};
GLfloat g_LightPosition[]={100.0,20.0,0.0,0.0};
GLfloat specular[]={1.0f,1.0f,1.0f,1.0F};
GLfloat shininess=10.0f;
GLfloat g_LightView[]={0.0,0.0,0.0,0.0};
/**********************************************************
工具函数
***********************************************************/
void emptyTexture();
AUX_RGBImageRec *LoadBMP(char *Filename) ;
int LoadGLFontTextures() ;
GLvoid BuildFont(GLvoid) ;
GLvoid KillFont(GLvoid) ;
GLvoid glPrint(GLint x, GLint y, char *string, int set);
void ShowFPS();
int LoadGLTextures(char * str,GLuint& texid);
// Performs All Your Initialization
BOOL Initialize (GL_Window* window, Keys* keys,Mouse* mouse)
{
emptyTexture();
g_mouse=mouse;
g_window = window;
g_keys = keys;
g_camera =new Camera();
glMatrixMode (GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity ();
gluPerspective(45, (float)window->init.width/(float)window->init.height, 0.1f, 500);
if (!LoadGLFontTextures()) // Jump To Texture Loading Routine
{
return FALSE; // If Texture Didn't Load Return FALSE
}
BuildFont();
ShowCursor(TRUE);
int err=glewInit();
if(err!=GLEW_OK)
MessageBox(NULL,"failed to init glew.","Error",MB_OK);
glEnable(GL_POINT_SPRITE);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL);
glViewport(0 , 0,window->init.width ,window->init.height); // Set Up A Viewport
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
shader=new CShader("temp.vert","temp.frag");
shader->loadShaders();
return true;
}
// Performs All Your DeInitialization
void Deinitialize (void)
{
}
// Perform Motion Updates
void Update (DWORD milliseconds)
{
// Is ESC Being Pressed?
if (g_keys->keyDown [VK_ESCAPE])
TerminateApplication (g_window);
if(true== g_mouse->isRClicked)
{
GetCursorPos(&curPos);
g_camera->CalcAngle(curPos.x-oldCurPos.x,curPos.y-oldCurPos.y);
SetCursorPos(oldCurPos.x,oldCurPos.y);
}
g_camera->Update(milliseconds);
g_camera->Set(0);
}
void emptyTexture()
{
GLuint* data;
data=(GLuint*)new GLuint[((1024*768)*3*sizeof(GLuint))];
ZeroMemory(data,((1024*768)*3*sizeof(GLuint)));
glGenTextures(1,&tex_target);
glBindTexture(GL_TEXTURE_2D,tex_target);
glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT,1024,768,0,GL_DEPTH_COMPONENT,GL_UNSIGNED_INT,data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
delete [] data;
}
void RenderWorld(bool on)
{
//glActiveTexture(GL_TEXTURE0);
//glBindTexture(GL_TEXTURE_2D,tex_floor);
if(on){
//glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,tex_target);
shader->enableShaders();
}
glPushMatrix();
//glTranslatef(0, -5, 0);
//DrawWalls();
glColor4f(1,0,0,1);
glBegin(GL_QUADS);
glNormal3f(0,1,0);
//glTexCoord2f(0.0f, 0.0f);
glVertex3f(100.0f,0.0f, -100.0f);
//glTexCoord2f(8.0f, 0.0f);
glVertex3f(-100.0f,0.0f, -100.0f);
// glTexCoord2f(8.0f, 5.0f);
glVertex3f(-100.0f, 0.0f, 100.0f);
// glTexCoord2f(0.0f, 5.0f);
glVertex3f(100.0f,0.0f,100.0f);
glEnd();
//draw cubic
glPushMatrix();
glTranslatef(0,-10,0);
//glScalef(0.5,0.5,0.5);
glBegin(GL_QUADS);
glColor4f(0,0,1,1);
glNormal3f(0,1,0);
glVertex3f(3.0f,25.0f, -3.0f);
glVertex3f(-3.0f,25.0f, -3.0f);
glVertex3f(-3.0f, 25.0f, 3.0f);
glVertex3f(3.0f,25.0f,3.0f);
glEnd();
//前侧面
glBegin(GL_QUADS);
glNormal3f(0,0,1);
glVertex3f(-3.0f,19.0f, 3.0f);
glVertex3f(3.0f,19.0f, 3.0f);
glVertex3f(3.0f, 25.0f, 3.0f);
glVertex3f(-3.0f,25.0f,3.0f);
glEnd();
//左侧面
glBegin(GL_QUADS);
glNormal3f(-1,0,0);
glVertex3f(-3.0f,19.0f, -3.0f);
glVertex3f(-3.0f,19.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 1.0f);
glVertex3f(-3.0f, 25.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 1.0f);
glVertex3f(-3.0f,25.0f,-3.0f);
glEnd();
//右侧面
glBegin(GL_QUADS);
glNormal3f(1,0,0);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 0.0f);
glVertex3f(3.0f,19.0f, -3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 0.0f);
glVertex3f(3.0f,19.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 1.0f);
glVertex3f(3.0f, 25.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 1.0f);
glVertex3f(3.0f,25.0f,-3.0f);
glEnd();
//后侧面
glBegin(GL_QUADS);
glNormal3f(0,0,-1);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 0.0f);
glVertex3f(3.0f,19.0f, -3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 0.0f);
glVertex3f(-3.0f,19.0f, -3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 1.0f);
glVertex3f(-3.0f, 25.0f, -3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 1.0f);
glVertex3f(3.0f,25.0f,-3.0f);
glEnd();
//底面
glBegin(GL_QUADS);
glNormal3f(0,-1,0);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 0.0f);
glVertex3f(-3.0f,19.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 0.0f);
glVertex3f(3.0f,19.0f, 3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,1.0f, 1.0f);
glVertex3f(3.0f, 19.0f, -3.0f);
//glMultiTexCoord2f(GL_TEXTURE0,0.0f, 1.0f);
glVertex3f(-3.0f,19.0f,-3.0f);
glEnd();
glPopMatrix();
glColor4f(1,1,1,1);
glPopMatrix();
if(on){
shader->disableShaders();
}
}
void ApplyShadowMap()
{
// Let's turn our shaders on for doing shadow mapping on our world
//g_Shader.TurnOn();
// Turn on our texture unit for shadow mapping and bind our depth texture
glBindTexture(GL_TEXTURE_2D, tex_target);
// Give GLSL our texture unit that holds the shadow map
//GLuint uniform = glGetUniformLocationARB(g_Shader.GetProgram(), "shadowMap");
//glUniform1iARB(uniform, 0);
// Here is where w
没有合适的资源?快使用搜索试试~ 我知道了~
shadow map PCF
共54个文件
h:11个
obj:5个
cpp:5个
4星 · 超过85%的资源 需积分: 10 18 下载量 75 浏览量
2012-12-14
18:45:33
上传
评论
收藏 5.94MB RAR 举报
温馨提示
opengl和glsl实现的纹理阴影,采用PCF对阴影纹理进行多重采样,使阴影边缘平滑
资源推荐
资源详情
资源评论
收起资源包目录
shadowmapPCF.rar (54个子文件)
精简版纹理阴影
resource.h 411B
GLAUX.H 12KB
GLU.H 18KB
Debug
CShader.sbr 0B
MyMath.obj 50KB
vc90.pdb 124KB
vc90.idb 475KB
BuildLog.htm 11KB
mt.dep 67B
demo.sbr 0B
demo.exe.embed.manifest 406B
NeHeGL.sbr 0B
demo.bsc 6.41MB
demo.obj 69KB
demo.ilk 1.51MB
demo.exe 587KB
Camera.obj 41KB
MyMath.sbr 0B
demo.pdb 2.67MB
CShader.obj 32KB
demo.exe.intermediate.manifest 381B
NeHeGL.obj 44KB
Camera.sbr 0B
demo.exe.embed.manifest.res 472B
demo.dsw 533B
glew32.dll 315KB
temp.vert 2KB
demo.plg 2KB
MyMath.h 1KB
glew.h 842KB
Matrix16.h 2KB
CShader.h 515B
MyMath.cpp 2KB
GL.H 67KB
demo.suo 71KB
demo.opt 53KB
CShader.cpp 4KB
demo.exe 587KB
demo.cpp 20KB
Data
Font.bmp 65KB
Bumps.bmp 48KB
Camera.h 813B
demo.vcproj 6KB
demo.dsp 5KB
demo.ncb 12.99MB
demo.vcproj.PC-201004301049.Administrator.user 1KB
NeHeGL.cpp 19KB
demo.vcproj.N4QFPASEV1RPDOM.Administrator.user 1KB
glew32.lib 523KB
glext.h 296KB
Camera.cpp 2KB
NeHeGL.h 4KB
demo.sln 873B
temp.frag 2KB
共 54 条
- 1
资源评论
- l1259312593123062013-11-22运行不起来啊,我的glew配置的好好的,总是出现“无法定位程序输入点glewInit 于动态链接库glew32.dll上”的错误,查了很久,用了各种办法都没能解决,只好放弃了。看起来写的也不是很简单啊,就是把里面的图形给变了吧?
- fghyht2014-04-19有点用,不错
- 广陵雪2015-11-02我下的代码里怎么没有shader
芯若止水0^0
- 粉丝: 4
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功