OpenGL的RedBook和BlueBook是两本什么样的书? opengl中怎样把二维的位图纹理贴到球面上
OpenGL\u7f16\u7a0b\u6307\u5357\u7b2c\u516b\u7248VS2015\u600e\u4e48\u914d\u7f6e\u4e00\u3001\u73af\u5883\u642d\u5efa\u6307\u5357
\u4e66\u4e2d\u7684\u5730\u5740
http://www.opengl-redbook.com/
\u53bb\u8fd9\u91cc\u6253\u5305\u4e0b\u8f7dOpenGL\u7ea2\u5b9d\u4e66\u7684\u793a\u4f8b\u4ee3\u7801\uff0c\u89e3\u538b\u540e\u662f\u8fd9\u6837
\u867d\u7136\u6ca1\u6709\u7b2c\u4e00\u7ae0\u7684\u4ee3\u7801\u4f46\u7b2c\u4e00\u7ae0\u7684\u5185\u5bb9\u597d\u6b79\u7b97\u4e00\u4e2a\u5b8c\u6574\u7684\u4f8b\u5b50\uff0c\u7f51\u4e0a\u5404\u79cd\u73af\u5883\u642d\u5efa\u6559\u7a0b\u4e5f\u90fd\u4ee5\u7b2c\u4e00\u7ae0\u7684\u4ee3\u7801\u4e3a\u4f8b\uff0c\u6211\u4eec\u5c31\u62ff\u8fc7\u6765\u76f4\u63a5\u7528\u4e00\u4e0b\u3002
1\u3001\u6253\u5f00VS2015\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684\u63a7\u5236\u53f0\u9879\u76ee\uff0c\u7136\u540e\u65b0\u5efa\u4e00\u4e2acpp\u6587\u4ef6\uff0c\u7c98\u8d34\u7ea2\u5b9d\u4e66\u7b2c\u4e00\u7ae0\u7684\u793a\u4f8b\u4ee3\u7801
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////
#include
using namespace std;
#include "vgl.h"
#include "LoadShaders.h"
enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };
GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];
const GLuint NumVertices = 6;
//---------------------------------------------------------------------
//
// init
//
void init(void)
{
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
GLfloat vertices[NumVertices][2] = {
{ -0.90, -0.90 }, // Triangle 1
{ 0.85, -0.90 },
{ -0.90, 0.85 },
{ 0.90, -0.85 }, // Triangle 2
{ 0.90, 0.90 },
{ -0.85, 0.90 }
};
glGenBuffers(NumBuffers, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
vertices, GL_STATIC_DRAW);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
//---------------------------------------------------------------------
//
// display
//
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAOs[Triangles]);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
glFlush();
}
//---------------------------------------------------------------------
//
// main
//
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512, 512);
glutInitContextVersion(4, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow(argv[0]);
glewExperimental = GL_TRUE;
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
init();
glutDisplayFunc(display);
glutMainLoop();
}
2\u3001\u6253\u5f00\u9879\u76ee\u5c5e\u6027\uff0c\u5728\u201cVC++ Directories\u201d\u9009\u9879\u5361\u4e2d\uff0c\u5c06\u524d\u9762\u4e0b\u8f7d\u56de\u6765\u7684\u7ea2\u5b9d\u4e66\u793a\u4f8b\u4ee3\u7801\u4e2d\u7684include\u76ee\u5f55\u52a0\u5165\u201cInclude Directories\u201d\uff0c\u5c06lib\u76ee\u5f55\u52a0\u5165\u201cLibrary Directories\u201d
3\u3001\u6253\u5f00\u9879\u76ee\u5c5e\u6027\uff0c\u5728\u201cGeneral\u201d\u9009\u9879\u5361\u4e2d\uff0c\u5c06\u201cPlatform Toolset\u201d\u8bbe\u7f6e\u4e3aVS2013
4\u3001\u5728\u9879\u76ee\u7ba1\u7406\u5668\u4e2d\u53f3\u51fbSource Files\u7684Filter\uff0c\u6dfb\u52a0\u73b0\u6709\u9879\uff0c\u7136\u540e\u627e\u5230\u7ea2\u5b9d\u4e66\u6e90\u7801\u76ee\u5f55\u4e2d\u7684lib\u76ee\u5f55\uff0c\u6dfb\u52a0LoadShaders.cpp\u6587\u4ef6
5\u3001\u6253\u5f00\u9879\u76ee\u5c5e\u6027\uff0c\u5728\u201cLinker/Input\u201d\u9009\u9879\u5361\u4e2d\uff0c\u5728\u201cIgnore Specific Default Libraries\u201d\u4e2d\u6dfb\u52a0libcmtd.lib
6\u3001\u5728\u9879\u76ee\u76ee\u5f55\u4e2d\u65b0\u5efa\u4e24\u4e2a\u6587\u672c\u5206\u522b\u547d\u540d\u4e3atriangles.vert\u548ctriangles.frag\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u7684\u9876\u70b9\u7740\u8272\u5668\u548c\u7247\u6bb5\u7740\u8272\u5668\u5566
triangles.vert
1
2
3
4
5
6
7
#version 430 core
layout(location = 0) in vec4 vPosition;
void
main()
{
gl_Position = vPosition;
}
triangles.frag
1
2
3
4
5
6
7
#version 430 core
out vec4 fColor;
void
main()
{
fColor = vec4(0.0, 0.0, 1.0, 1.0);
}
7\u3001\u7f16\u8bd1\uff0c\u8fd0\u884c\uff0c\u641e\u5b9a
\u4e8c\u3001\u6240\u4ee5\u7136
1\u3001\u5173\u4e8e\u7b2c\u4e00\u6b65
\u8fd9\u91cc\u7684\u793a\u4f8b\u4ee3\u7801\u5176\u5b9e\u6bd4\u4e66\u4e2d\u7684\u591a\u4e86\u4e00\u53e5
glewExperimental = GL_TRUE;
\u4e66\u91cc\u7684\u4ee3\u7801\u7528\u5230\u4e86GLEW\u5e93\uff0cGLEW\u53ef\u4ee5\u8de8\u5e73\u53f0\u652f\u6301OpenGL\u9ad8\u7ea7\u6269\u5c55\u7279\u6027\uff0c\u6ca1\u6709GLEW\u7684\u8bdd\u5728Win\u5e73\u53f0\u662f\u65e0\u6cd5\u4f7f\u75284.3\u7684\u90a3\u4e9b\u529f\u80fd\u7684\u3002\u8fd9\u53e5
\u4ee3\u7801\u662fGLEW\u6240\u6709\u6269\u5c55\u7684\u4e00\u4e2a\u5f00\u5173\uff0c\u9700\u8981\u5728glewInit()\u4e4b\u524d\u6267\u884c\u3002\u5982\u679c\u6ca1\u6709\u8fd9\u4e00\u53e5\uff0c\u7f16\u8bd1\u662f\u53ef\u4ee5\u901a\u8fc7\u7684\uff0c\u4f46\u5728\u8fd0\u884c\u65f6\u4f1a\u5d29\u6e83\u3002
2\u3001\u5173\u4e8e\u7b2c\u4e8c\u6b65
\u4e3b\u8981\u76ee\u7684\u662f\u5c06\u793a\u4f8b\u4ee3\u7801\u4e2d\u7528\u5230\u7684GLUT\u548cGLEW\u5e93\u7684\u5934\u6587\u4ef6\u548c\u5e93\u6587\u4ef6\u5f15\u5165\u9879\u76ee\u76ee\u5f55\u3002\u8fd9\u4e00\u6b65\u6ca1\u8bbe\u7f6e\u597d\u7684\u8bdd\u7f16\u8bd1\u65e0\u6cd5\u901a\u8fc7\uff0c\u73b0\u8c61\u4e00\u822c\u662f\u65e0\u6cd5\u6253\u5f00freeglut\u76f8\u5173\u5e93\u6587\u4ef6\u6216\u8005\u67d0\u4e9b\u51fd\u6570\u6ca1\u6709\u58f0\u660e\u3002
\u7f51\u4e0a\u6709\u4e9b\u6559\u7a0b\u8ba9\u4f60\u81ea\u5df1\u53bb\u4e0b\u8f7d\u5e76\u7f16\u8bd1freeglut\u548cglew\uff0c\u7136\u540e\u62f7\u8d1d\u5230\u5404\u79cd\u7cfb\u7edf\u76ee\u5f55\u548cVS\u7684\u76ee\u5f55\uff0c\u5176\u5b9e\u6ca1\u7528\u3002\u6240\u6709\u7528\u5230\u7684\u5934\u6587\u4ef6\u548c\u5e93\u6587\u4ef6\u5728\u7b2c\u516b\u7248\u793a\u4f8b\u4ee3\u7801include\u548clib\u76ee\u5f55\u4e2d\u90fd\u6709\u4e86\uff0c\u4f60\u53ea\u8981\u6b63\u786e\u5f15\u5165\u9879\u76ee\u4e2d\u5c31\u4e0d\u4f1a\u6709\u95ee\u9898\u3002
3\u3001\u5173\u4e8e\u7b2c\u4e09\u6b65
\u53ea\u6709VS2015\u9700\u8981\u8fd9\u4e00\u6b65
VS2015\u66f4\u6539\u4e86\u5f88\u591a\u6807\u51c6\u5e93\u7684\u94fe\u63a5\u65b9\u5f0f\u548c\u5b8f\u5b9a\u4e49\uff0c\u800c\u7ea2\u5b9d\u4e66\u7b2c\u516b\u7248\u4e2d\u7528\u5230\u7684freeglut\u5e93\u4e2d\u7528\u5230\u4e86\u8fd9\u4e9b\u6807\u51c6\u5e93\u548c\u5b8f\u3002\u6240\u4ee5\u5982\u679c\u62a5_sscanf\u6216\u8005__iob_func\u662f\u65e0\u6cd5\u89e3\u6790\u7684\u5916\u90e8\u7b26\u53f7\u4e4b\u7c7b\u7684\u9519\u8bef\uff0c\u53ea\u9700\u8981\u628a\u5e73\u53f0\u5de5\u5177\u96c6\u6539\u6210\u65e7\u7684\u5c31\u884c\u4e86\u3002
4\u3001\u5173\u4e8e\u7b2c\u56db\u6b65
\u6ca1\u6709\u8fd9\u4e00\u9879\uff0cLoadShaders\u4e2d\u5b9a\u4e49\u7684\u51fd\u6570\u4f1a\u62a5\u65e0\u6cd5\u89e3\u6790\u7684\u5916\u90e8\u7b26\u53f7\u9519\u8bef\u3002
5\u3001\u5173\u4e8e\u7b2c\u4e94\u6b65
\u5982\u679c\u4e0d\u5ffd\u7565\u8fd9\u4e2a\u9ed8\u8ba4\u5e93\uff0c\u4f1a\u62a5\u5e93\u51b2\u7a81\u6216\u8005\u65e0\u6cd5\u6253\u5f00\u5e93\u6587\u4ef6\u7684\u9519\u8bef\u3002
6\u3001\u5173\u4e8e\u7b2c\u516d\u6b65
\u6ca1\u7740\u8272\u5668\u753b\u4e2a\u5375\uff0c\u8fd0\u884c\u6f06\u9ed1\u4e00\u7247\u3002
7\u3001\u53cc\u663e\u5361\u7535\u8111\u53c8\u8eba\u67aa\u4e86
\u6211\u6298\u817e\u4e86\u534a\u5929\u8fd0\u884cCMD\u663e\u793aUnable to create OpenGL 4.3 context\uff0c\u5c3c\u739b\u53cc\u663e\u5361\u7535\u8111\u9ed8\u8ba4\u7528\u6838\u5fc3\u663e\u5361\u542f\u52a8\u5e94\u7528\u3002\u6253\u5f00NVidia\u63a7\u5236\u9762\u677f-\u7ba1\u74063D\u8bbe\u7f6e-\u5168\u5c40\u8bbe\u7f6e-\u9996\u9009\u56fe\u5f62\u5904\u7406\u5668\uff0c\u628a\u72ec\u663e\u8bbe\u4e3a\u9ed8\u8ba4\u5c31OK\u4e86\u3002
http://www.cnblogs.com/gagugagu/p/5211452.html
\u5927\u6982\u6b65\u9aa4:
1.\u521b\u5efa\u7eb9\u7406\u5bf9\u8c61,\u5e76\u4e3a\u4ed6\u6307\u5b9a\u4e00\u4e2a\u7eb9\u7406.
2.\u786e\u5b9a\u7eb9\u7406\u5982\u4f55\u5e94\u7528\u5230\u6bcf\u4e2a\u50cf\u7d20\u4e0a.
3.\u542f\u7528\u7eb9\u7406\u8d34\u56fe
4.\u7ed8\u5236\u573a\u666f,\u63d0\u4f9b\u7eb9\u7406\u548c\u51e0\u4f55\u5750\u6807
\u8fc7\u6ee4:\u7531\u4e8e\u6211\u4eec\u63d0\u4f9b\u7684\u7eb9\u7406\u56fe\u50cf\u5f88\u5c11\u80fd\u548c\u6700\u7ec8\u7684\u5c4f\u5e55\u5750\u6807\u5f62\u6210\u5bf9\u5e94,\u5927\u5c0f\u4e0d\u540c,\u6240\u4ee5\u9700\u8981\u8bbe\u7f6e\u8fc7\u6ee4\u9879\u76ee.\u5141\u8bb8\u6211\u4eec\u8fdb\u884c\u63d2\u503c\u6216\u8005\u5300\u548c,\u6307\u5b9a\u653e\u5927\u7f29\u5c0f\u7684\u51fd\u6570.glTexParameter*(),\u4f7f\u7528\u8fc7\u6ee4\u6a21\u5f0fGL_NEAREST\u90a3\u4e48\u7eb9\u7406\u5355\u4f4d\u6700\u90bb\u8fd1\u7684\u5c06\u88ab\u4f7f\u7528,GL_LINEAR\u90a3\u4e48\u5c31\u75282*2\u7684\u5305\u542b\u7eb9\u7406\u6570\u636e\u7684\u6570\u7ec4\u52a0\u6743\u7ec4\u4f5c\u4e3a\u7eb9\u7406;
\u547d\u540d\u7eb9\u7406\u5bf9\u8c61:glGenTexures(GLSize n,Gluint *textureNames); n\u4e3a\u4ea7\u751fn\u4e2a\u672a\u4f7f\u7528\u7684\u5bf9\u8c61\u503c,textureNames\u4e3a\u7eb9\u7406\u540d\u5b57\u6570\u7ec4,\u4f60\u53ef\u80fd\u6709\u51e0\u4e2a\u7eb9\u7406\u9700\u8981\u4f7f\u7528,\u8fd9\u4e2a\u6570\u7ec4\u6765\u533a\u5206.
1.\u4f60\u9700\u8981\u8f7d\u5165\u56fe\u7247\u65f6\u5019\u7684\u7eb9\u7406\u5b9a\u4e49
void glTexImage2D( GLenum target, GLint level, GLint components,GLsizei width, GLsizei height, GLint border,GLenum format, GLenum type, const GLvoid *pixels );
\u5b9a\u4e49\u4e00\u4e2a\u4e8c\u7ef4\u7eb9\u7406\u6620\u5c04\u3002target\u662f\u5e38\u6570 GL_TEXTURE_2D, level\u8868\u793a\u591a\u7ea7\u5206\u8fa8\u7387\u7684\u7eb9\u7406\u56fe\u8c61\u7684\u7ea7\u6570\u3002\u82e5\u53ea\u6709\u4e00\u79cd\u5206\u8fa8\u7387\uff0clevel\u4e3a0\u3002components\u662f\u4ece1\u52304\u7684\u6574\u6570\uff0c1\uff1a\u9009\u62e9R\uff1b2\uff1a\u9009\u62e9R A\uff1b3\uff1a\u9009\u62e9R G B\uff1b
\u6e90\u6587\u6863
\u7ed1\u5b9a\u7eb9\u7406\u5bf9\u8c61:glBindTexture(Glenum target,Gluint,glTexImage*),\u5c06\u628a\u6570\u636e\u5b58\u50a8\u5230\u8fd9\u4e2a\u7eb9\u7406\u5bf9\u8c61\u4e2d,\u5982\u679c\u9700\u8981\u7eb9\u7406\u56fe\u50cf\u7684\u989c\u8272\u548c\u7269\u4f53\u8868\u9762\u7684\u989c\u8272\u8fdb\u884c\u7ec4\u5408,\u4e0d\u662f\u76f4\u63a5\u8d34\u56fe,\u90a3\u4e48\u5c31\u9700\u8981glTexEvn*()\u51fd\u6570.
\u786e\u5b9a\u7eb9\u7406\u5750\u6807:glTexCoord2f(1\uff0eof\uff0c1\uff0eOf)\uff1bglVertex3f(1\uff0eOf\uff0c1\uff0eOf\uff0c0\uff0eOf)\uff1b\u6bd4\u5982\u8fd9\u4e00\u53e5\u8bdd.\u5bf9\u4e8e\u8bbe\u7f6e\u7eb9\u7406\u8d34\u56fe\u7684\u5750\u6807\u548c\u7ed8\u56fe\u5750\u6807\u7684\u786e\u5b9a\u95ee\u9898.\u4e00\u822c\u7684\u60c5\u51b5\u5047\u8bbe\u7eb9\u7406\u548c\u56fe\u7247\u90fd\u662f\u6b63\u65b9\u5f62\u7684,\u90a3\u4e48\u6211\u4eec\u5e0c\u671b\u7eb9\u7406\u6620\u5c04\u5230\u6574\u4e2a\u7269\u4f53\u4e0a\u9762,\u8fd9\u4e2a\u65f6\u5019\u7eb9\u7406\u5750\u6807\u6309\u7167\u9006\u65f6\u9488\u653e\u5fc3\u4f9d\u6b21(0,0),(1,0),(1,1),(0,1),\u5176\u4e2d\u7684\u56db\u4e2a\u5750\u6807\u53ea\u662f\u4ee3\u8868\u7684\u5411\u91cf,\u5e76\u4e0d\u662f\u771f\u5b9e\u7684\u5750\u6807,\u5982\u679c\u662f\u8981\u4e00\u534a\u8d34\u5230\u7269\u4f53\u4e0a\u5c31\u5e94\u8be5\u662f0.5\u7684\u503c\u4e86,\u5047\u5982\u4f60\u7ed9\u7684\u7eb9\u7406\u5750\u6807\u5927\u4e8e1,\u90a3\u4e48\u5c06\u4f1a\u8d34\u591a\u4e2a\u7eb9\u7406,\u6bd4\u5982\u503c\u4e3a2\u7684\u65f6\u5019,\u4f1a\u67094\u4e2a\u7eb9\u7406\u8d34\u56fe.
1 \u6982\u8ff0
\u6982\u62ec\u7684\u8bf4\uff0c \u7eb9\u7406\u6620\u5c04\u673a\u5236\u5141\u8bb8\u4f60\u5c06\u4e00\u4e2a\u56fe\u50cf\u5173\u8054\u5230\u4e00\u4e2a\u591a\u8fb9\u5f62\u4e0a\uff0c\u4ece\u800c\u5448\u73b0\u51fa\u771f\u5b9e\u89c6\u89c9\u6548\u679c\u3002\u4f8b\u5982\uff0c \u4f60\u53ef\u4ee5\u5c06\u4e66\u7684\u5c01\u9762\u56fe\u50cf\u5e94\u7528\u5230\u4e00\u4e2a\u65b9\u5f62\u4e0a\uff0c \u8fd9\u6837\u8fd9\u4e2a\u65b9\u5f62\u770b\u8d77\u6765\u5c31\u50cf\u662f\u4e00\u672c\u4e66\u4e86\u3002 \u4f60\u53ef\u4ee5\u5c06\u5730\u7403\u7684\u5730\u56fe\u901a\u8fc7\u7eb9\u7406\u6620\u5c04\u5e94\u7528\u5230\u4e00\u4e2a\u7403\u4f53\u4e0a\uff0c \u90a3\u4e48\u8fd9\u4e2a\u7403\u4f53\u5c31\u662f\u4e00\u4e2a3D\u7684\u5177\u771f\u5b9e\u611f\u7684\u5730\u7403\u4e86\u3002\u7eb9\u7406\u6620\u5c04\u5728\u5f53\u4eca\u76843D\u56fe\u5f62\u5e94\u7528\u4e0a\u5904\u5904\u7686\u662f\u3002\u6e38\u620f\u90fd\u662f\u901a\u8fc7\u7eb9\u7406\u6620\u5c04\u6765\u4f5c\u4e3a\u865a\u62df\u771f\u5b9e\u7684\u7b2c\u4e00\u4e2a\u6b65\u9aa4\u3002
\u7eb9\u7406\u6620\u5c04\u662f\u4e00\u4e2a\u4e8c\u7ef4\u7684\u6570\u7ec4\u3002\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e00\u9879\u79f0\u4e4b\u4e3a\u7eb9\u7406\u70b9( texel )\u3002 \u867d\u7136\u8fd9\u4e2a\u6570\u7ec4\u662f\u4e8c\u7ef4\u7684\uff0c \u4f46\u662f\u53ef\u4ee5\u6620\u5c04\u5230\u975e\u4e8c\u7ef4\u7684\u5bf9\u8c61\u4e0a\uff0c \u5982\u7403\u4f53\u6216\u8005\u5176\u4ed6\u7684 3D \u5bf9\u8c61\u6a21\u578b\u4e0a\u3002
\u6bd4\u8f83\u5e38\u89c1\u7684\u662f\uff0c \u5f00\u53d1\u8005\u5728\u4ed6\u4eec\u7684\u56fe\u5f62\u5e94\u7528\u4e2d\u8fd0\u7528\u4e8c\u7ef4\u7eb9\u7406\uff0c \u5f53\u7136\u4e00\u7ef4\u6216\u8005\u4e09\u7ef4\u7684\u7eb9\u7406\u4e5f\u5e76\u975e\u672a\u95fb\u3002\u4e8c\u7ef4\u7eb9\u7406\u6709\u5bbd\u5ea6\u548c\u9ad8\u5ea6\u51b3\u5b9a\u4e8c\u7ef4\u3002\u4e00\u7ef4\u7eb9\u7406\u4e5f\u6709\u5bbd\u5ea6\u548c\u9ad8\u5ea6\uff0c \u53ea\u662f\u9ad8\u5ea6\u88ab\u8bbe\u4e3a\u503c 1\uff08\u5355\u4f4d\uff1a\u50cf\u7d20 pixel). \u800c\u4e09\u7ef4\u7eb9\u7406\u4e0d\u4ec5\u5177\u6709\u5bbd\u5ea6\u548c\u9ad8\u5ea6\uff0c \u8fd8\u6709\u6df1\u5ea6\uff0c \u6240\u4ee5\u4e09\u7ef4\u4e3a\u7eb9\u7406\u53c8\u79f0\u4e3a\u7acb\u4f53\u7eb9\u7406\u3002\u6211\u4eec\u8ba8\u8bba\u7684\u4e3b\u8981\u662f\u4e8c\u7ef4\u7eb9\u7406\u3002
2 \u9884\u5907\u77e5\u8bc6\uff1a \u7eb9\u7406\u5750\u6807
\u5728 OpenGl \u4e2d\u662f\u901a\u8fc7\u6307\u5b9a\u7eb9\u7406\u5750\u6807\u6765\u5c06\u7eb9\u7406\u6620\u5c04\u5230\u591a\u8fb9\u5f62\u4e0a\u53bb\u7684. \u5728\u7eb9\u7406\u5750\u6807\u7cfb\u4e2d, \u5de6\u4e0b\u89d2\u662f (0,0), \u53f3\u4e0a\u89d2\u662f (1,1). 2D \u7eb9\u7406\u7684\u5750\u6807\u4e2d\u901a\u8fc7\u6307\u5b9a (s,t) (s\u4e3ax\u8f74\u4e0a,t\u4e3ay\u8f74\u4e0a, \u53d6\u503c0~1). 1D, 3D, 4D\u7eb9\u7406\u5750\u6807\u7cfb\u4e2d\u5bf9\u5e94\u7684\u9700\u8981\u6307\u5b9a (s), (s,t,r), (s,t, r,q).
\u7eb9\u7406\u5750\u6807\u9700\u8981\u901a\u8fc7\u51fd\u6570 glTexCoord() \u6765\u8bbe\u7f6e, \u6b64\u51fd\u6570:
void glTexCoord{1234}{sifd}(TYPE coords);
void glTexCoord{1234}{sifd}v(TYPE coords);
\u5982\u5c06 2D \u7eb9\u7406\u5750\u6807\u8bbe\u4e3a (0.2, 0.4):
1
glTexCoord2f(0.2f,0.4f);
\u6bcf\u6b21\u901a\u8fc7 glVertex() \u6307\u5b9a\u4e00\u4e2a\u9876\u70b9\u65f6, \u5f53\u524d\u7684\u7eb9\u7406\u5750\u6807\u4f1a\u88ab\u5e94\u7528\u5230\u8fd9\u4e2a\u70b9\u4e0a. \u6240\u4ee5\u6bcf\u6307\u5b9a\u4e00\u4e2a\u65b0\u7684\u9876\u70b9, \u9700\u8981\u540c\u65f6\u4fee\u6539\u7eb9\u7406\u5750\u6807:
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5f, 0.5f, 0.5f);//\u5de6\u4e0b\u89d2
glTexCoord2f(1.0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.5f); // \u53f3\u4e0b\u89d2
glTexCoord2f(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f);// \u53f3\u4e0a\u89d2
glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f);// \u5de6\u4e0a\u89d2
glEnd();
\u81f3\u6b64, \u6211\u4eec\u77e5\u9053\u4e86\u7eb9\u7406\u5750\u6807\u5982\u4f55\u8d4b\u503c.\u4e14\u770b\u5982\u4f55\u521b\u5efa\u7eb9\u7406:
3 \u4f7f\u7528\u7eb9\u7406\u6620\u5c04
\u7eb9\u7406\u5c31\u662f\u5e94\u7528\u5230\u591a\u8fb9\u5f62\u4e0a\u7684\u56fe\u50cf. \u8fd9\u4e9b\u56fe\u50cf\u53ef\u4ee5\u4ece\u6587\u4ef6\u4e2d\u52a0\u8f7d, \u6216\u662f\u5728\u5185\u5b58\u4e2d\u751f\u6210. \u4e00\u65e6\u4f60\u5c06\u56fe\u50cf\u6570\u636e\u52a0\u8f7d\u5230\u4e86\u5185\u5b58\u4e2d, \u4f60\u9700\u8981\u6307\u5b9a\u5176\u4e3a\u7eb9\u7406\u6620\u5c04\u6765\u4f7f\u7528\u5b83. \u6307\u5b9a\u5176\u4e3a\u7eb9\u7406\u6620\u5c04, \u9996\u5148\u9700\u8981\u751f\u6210\u4e00\u4e2a\u7eb9\u7406\u5bf9\u8c61, \u5176\u4e2d\u5b58\u50a8\u7740\u7eb9\u7406\u7684\u8bf8\u5982\u56fe\u50cf\u6570\u636e, \u5982\u4f55\u5e94\u7528\u7b49\u4fe1\u606f.
\u7eb9\u7406\u662f\u4e00\u4e2aOpenGL\u72b6\u6001, \u56e0\u800c\u901a\u8fc7 glEnable() \u548c glDisable() \u6765\u5f00\u95ed\uff0c \u53c2\u6570\u662f GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP.
BlueBook就是所说的“蓝宝书”,书名是《OpenGL超级宝典》
它们很适合初学OpenGL的人看。
这学期刚学的OpenGL,老师给我们推荐说 红宝书适合初学者用,知识体系全面,比较容易入门;
而蓝宝书更像一本工具书,类似于字典,适合编程时查询用。希望能对你有帮助。
绛旓細RedBook灏辨槸鎵璇寸殑鈥滅孩瀹濅功鈥濓紝涔﹀悕鏄OpenGL缂栫▼鎸囧崡銆BlueBook灏辨槸鎵璇寸殑鈥滆摑瀹濅功鈥濓紝涔﹀悕鏄奜penGL瓒呯骇瀹濆吀銆嬪畠浠緢閫傚悎鍒濆OpenGL鐨勪汉鐪嬨
绛旓細2.OpenGL Programming Guide(Red Book)銆奜penGL缂栫▼鎸囧崡銆婳penGL缂栫▼鎸囧崡鏄OpenGL鐨缁忓吀鏁欐潗锛岃绉颁负Red Book锛屽唴瀹硅瀹烇紝閫傚悎鏈変竴瀹氱紪绋嬪熀纭鐨勮鑰呭涔犮備功涓粙缁嶄簡OpenGL鐨勫熀鏈蹇点佸浘褰㈢粯鍒躲佸彉鎹佸厜鐓х瓑鍐呭锛屽苟鎻愪緵浜嗗ぇ閲忓疄渚嬪拰浠g爜銆3.OpenGL SuperBible銆奜penGL瓒呯骇瀹濆吀銆婳penGL瓒呯骇瀹濆吀鏄竴鏈潈濞佺殑Open...
绛旓細glutSolidSphere();鎴栬呴渶瑕佺粯鍒舵湁texture鐨勭悆浣 GLUquadricObj *quadPlanet;quadPlanet = gluNewQuadric();gluQuadricTexture(quadPlanet,GL_TRUE);gluSphere(quadPlanet,radius,20,16);gluDeleteQuadric(quadPlanet);鍙傝冭祫鏂欙細opengl red book
绛旓細鍦╒S2005涓埄鐢ㄥ凡鏈夋枃浠跺垱寤烘柊椤圭洰锛岋紝鍑虹幇閿欒锛歁SVCRTD.lib(crtexew.obj) : error LNK2019: 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙穇WinMain@16锛岃绗﹀彿鍦ㄥ嚱鏁癬__tmainCRTStartup 涓寮曠敤銆侳:\Graphics\C++primer source code\opengl-red-book8-3\8-4image\Debug\8-4image.exe : fatal error LNK1120: 1 涓棤娉...
绛旓細F:\Graphics\C++primer source code\opengl-red-book8-3\8-4image\Debug\8-4image.exe : fatal error LNK1120: 1 涓棤娉曡В鏋愮殑澶栭儴鍛戒护銆傚師鍥犲氨鍦ㄤ簬锛岃繖涓枃浠舵湰韬槸鎺у埗鍙板舰寮忕殑锛岃屽垱寤虹殑椤圭洰鏄痺in32鐨勶紝鍑洪敊灏变笉濂囨簡銆傞偅鐜板湪鎴戜滑灏遍渶瑕佸皢椤圭洰鐨勭被鍨嬫敼涓簑in32椤圭洰锛岃鎬庢牱鎵嶈兘瀹炵幇win32椤圭洰鍜...
绛旓細锛3锛夋妸瑙e帇寰楀埌鐨刧lut.dll鍜実lut32.dll鏀惧埌鎿嶄綔绯荤粺鐩綍涓嬮潰鐨剆ystem32鏂囦欢澶瑰唴銆傦紙鍏稿瀷鐨勪綅缃负锛欳:\Windows\System32锛夎繖鏄潪甯搁噸瑕佺殑鍔ㄦ侀摼鎺ュ簱璁剧疆锛侊紙4锛夊垱寤轰竴涓猈in32 Console Application銆傦紙浠ユ垜鍒涘缓鐨勪负渚嬶紝宸ョ▼鍚嶄负simpleGL锛夛紙5锛夐摼鎺OpenGL libraries:鍦╒isual C++涓厛鍗曞嚮Project锛屽啀鍗曞嚮...
绛旓細鐢―irectX锛圖3D锛夋垨鑰OpenGL鏉ュ仛锛屽墠鑰呮渶甯歌浜嶹indows锛屽悗鑰呭亸鍚戝骞冲彴銆俤x鐨勮嚜瀛︽暀鏉愮浉瀵瑰涓浜涖傚紑鍙戣澶囬渶瑕佽涓婄浉鍏崇殑浜岃繘鍒舵敮鎸佹枃浠讹紙exe銆乨ll銆乴ib绛夛級鍜宻dk锛坔銆乧pp绛夛級銆傜湡姝e紑鍙戞椂寤鸿浣跨敤灏咲irectX銆丱penGL灏佽濂界殑搴撲互渚垮噺灏戜笉蹇呰鐨勫伐浣溿
绛旓細MSVCRTD.lib(crtexew.obj) : error LNK2019: 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙穇WinMain@16锛岃绗﹀彿鍦ㄥ嚱鏁癬__tmainCRTStartup 涓寮曠敤銆侳:\Graphics\C++primer source code\opengl-red-book8-3\8-4image\Debug\8-4image.exe : fatal error LNK1120: 1 涓棤娉曡В鏋愮殑澶栭儴鍛戒护銆傚師鍥犲氨鍦ㄤ簬锛岃繖涓枃浠舵湰韬槸鎺у埗...