/*! \file shapes.c
\ingroup demos
This program is a test harness for the various shapes
in OpenGLUT. It may also be useful to see which
parameters control what behavior in the OpenGLUT
objects.
Spinning wireframe and solid-shaded shapes are
displayed. Some parameters can be adjusted.
Keys:
- <tt>Esc </tt> Quit
- <tt>q Q </tt> Quit
- <tt>i I </tt> Show info
- <tt>p P </tt> Toggle perspective or orthographic projection
- <tt>r R </tt> Toggle fixed or animated rotation around model X-axis
- <tt>s S </tt> Toggle toggle fixed function or shader render path
- <tt>n N </tt> Toggle visualization of object's normal vectors
- <tt>= + </tt> Increase \a slices
- <tt>- _ </tt> Decreate \a slices
- <tt>, < </tt> Decreate \a stacks
- <tt>. > </tt> Increase \a stacks
- <tt>9 ( </tt> Decreate \a depth (Sierpinski Sponge)
- <tt>0 ) </tt> Increase \a depth (Sierpinski Sponge)
- <tt>up </tt> Increase "outer radius"
- <tt>down </tt> Decrease "outer radius"
- <tt>left </tt> Decrease "inner radius"
- <tt>right</tt> Increase "inner radius"
- <tt>PgUp </tt> Next shape-drawing function
- <tt>PgDn </tt> Prev shape-drawing function
\author Written by Nigel Stewart November 2003
\author Portions Copyright (C) 2004, the OpenGLUT project contributors. <br>
OpenGLUT branched from freeglut in February, 2004.
\image html openglut_shapes.png OpenGLUT Geometric Shapes Demonstration
\include demos/shapes/shapes.c
*/
#include <GL/freeglut.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "glmatrix.h"
#ifdef _MSC_VER
/* DUMP MEMORY LEAKS */
#include <crtdbg.h>
#endif
/* report GL errors, if any, to stderr */
void checkError(const char *functionName)
{
GLenum error;
while (( error = glGetError() ) != GL_NO_ERROR) {
fprintf (stderr, "GL error 0x%X detected in %s\n", error, functionName);
}
}
/*
* OpenGL 2+ shader mode needs some function and macro definitions,
* avoiding a dependency on additional libraries like GLEW or the
* GL/glext.h header
*/
#ifndef GL_FRAGMENT_SHADER
#define GL_FRAGMENT_SHADER 0x8B30
#endif
#ifndef GL_VERTEX_SHADER
#define GL_VERTEX_SHADER 0x8B31
#endif
#ifndef GL_COMPILE_STATUS
#define GL_COMPILE_STATUS 0x8B81
#endif
#ifndef GL_LINK_STATUS
#define GL_LINK_STATUS 0x8B82
#endif
#ifndef GL_INFO_LOG_LENGTH
#define GL_INFO_LOG_LENGTH 0x8B84
#endif
typedef ptrdiff_t ourGLsizeiptr;
typedef char ourGLchar;
#ifndef APIENTRY
#define APIENTRY
#endif
#ifndef GL_VERSION_2_0
typedef GLuint (APIENTRY *PFNGLCREATESHADERPROC) (GLenum type);
typedef void (APIENTRY *PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const ourGLchar **string, const GLint *length);
typedef void (APIENTRY *PFNGLCOMPILESHADERPROC) (GLuint shader);
typedef GLuint (APIENTRY *PFNGLCREATEPROGRAMPROC) (void);
typedef void (APIENTRY *PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
typedef void (APIENTRY *PFNGLLINKPROGRAMPROC) (GLuint program);
typedef void (APIENTRY *PFNGLUSEPROGRAMPROC) (GLuint program);
typedef void (APIENTRY *PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);
typedef void (APIENTRY *PFNGLGETPROGRAMIVPROC) (GLenum target, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);
typedef GLint (APIENTRY *PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const ourGLchar *name);
typedef GLint (APIENTRY *PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const ourGLchar *name);
typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRY *PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
#endif
PFNGLCREATESHADERPROC gl_CreateShader;
PFNGLSHADERSOURCEPROC gl_ShaderSource;
PFNGLCOMPILESHADERPROC gl_CompileShader;
PFNGLCREATEPROGRAMPROC gl_CreateProgram;
PFNGLATTACHSHADERPROC gl_AttachShader;
PFNGLLINKPROGRAMPROC gl_LinkProgram;
PFNGLUSEPROGRAMPROC gl_UseProgram;
PFNGLGETSHADERIVPROC gl_GetShaderiv;
PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog;
PFNGLGETPROGRAMIVPROC gl_GetProgramiv;
PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog;
PFNGLGETATTRIBLOCATIONPROC gl_GetAttribLocation;
PFNGLGETUNIFORMLOCATIONPROC gl_GetUniformLocation;
PFNGLUNIFORMMATRIX4FVPROC gl_UniformMatrix4fv;
PFNGLUNIFORMMATRIX3FVPROC gl_UniformMatrix3fv;
void initExtensionEntries(void)
{
gl_CreateShader = (PFNGLCREATESHADERPROC) glutGetProcAddress ("glCreateShader");
gl_ShaderSource = (PFNGLSHADERSOURCEPROC) glutGetProcAddress ("glShaderSource");
gl_CompileShader = (PFNGLCOMPILESHADERPROC) glutGetProcAddress ("glCompileShader");
gl_CreateProgram = (PFNGLCREATEPROGRAMPROC) glutGetProcAddress ("glCreateProgram");
gl_AttachShader = (PFNGLATTACHSHADERPROC) glutGetProcAddress ("glAttachShader");
gl_LinkProgram = (PFNGLLINKPROGRAMPROC) glutGetProcAddress ("glLinkProgram");
gl_UseProgram = (PFNGLUSEPROGRAMPROC) glutGetProcAddress ("glUseProgram");
gl_GetShaderiv = (PFNGLGETSHADERIVPROC) glutGetProcAddress ("glGetShaderiv");
gl_GetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) glutGetProcAddress ("glGetShaderInfoLog");
gl_GetProgramiv = (PFNGLGETPROGRAMIVPROC) glutGetProcAddress ("glGetProgramiv");
gl_GetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) glutGetProcAddress ("glGetProgramInfoLog");
gl_GetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) glutGetProcAddress ("glGetAttribLocation");
gl_GetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) glutGetProcAddress ("glGetUniformLocation");
gl_UniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) glutGetProcAddress ("glUniformMatrix4fv");
gl_UniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) glutGetProcAddress ("glUniformMatrix3fv");
if (!gl_CreateShader || !gl_ShaderSource || !gl_CompileShader || !gl_CreateProgram || !gl_AttachShader || !gl_LinkProgram || !gl_UseProgram || !gl_GetShaderiv || !gl_GetShaderInfoLog || !gl_GetProgramiv || !gl_GetProgramInfoLog || !gl_GetAttribLocation || !gl_GetUniformLocation || !gl_UniformMatrix4fv || !gl_UniformMatrix3fv)
{
fprintf (stderr, "glCreateShader, glShaderSource, glCompileShader, glCreateProgram, glAttachShader, glLinkProgram, glUseProgram, glGetShaderiv, glGetShaderInfoLog, glGetProgramiv, glGetProgramInfoLog, glGetAttribLocation, glGetUniformLocation, glUniformMatrix4fv or gl_UniformMatrix3fv not found");
exit(1);
}
}
const ourGLchar *vertexShaderSource[] = {
"/**",
" * From the OpenGL Programming wikibook: http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Smooth_Specular_Highlights",
" * This file is in the public domain.",
" * Contributors: Sylvain Beucler",
" */",
"attribute vec3 fg_coord;",
"attribute vec3 fg_normal;",
"varying vec4 position; /* position of the vertex (and fragment) in world space */",
"varying vec3 varyingNormalDirection; /* surface normal vector in world space */",
"uniform mat4 m, p; /* don't need v, as always identity in our demo */",
"uniform mat3 m_3x3_inv_transp;",
" ",
"void main()",
"{",
" vec4 fg_coord4 = vec4(fg_coord, 1.0);",
" position = m * fg_coord4;",
" varyingNormalDirection = normalize(m_3x3_inv_transp * fg_normal);",
" ",
" mat4 mvp = p*m; /* normally p*v*m */",
" gl_Position = mvp * fg_coord4;",
"}"
};
const ourGLchar *fragmentShaderSource[] = {
"/**",
" * From the OpenGL Programming wikibook: http://en.wikibooks.org/wiki/GLSL_Prog
没有合适的资源?快使用搜索试试~ 我知道了~
Red Panda C++是一个快速,轻量级,开源和跨平台的C/C++/GNU汇编IDE
共1622个文件
png:463个
svg:432个
cpp:182个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 175 浏览量
2023-07-17
16:20:59
上传
评论
收藏 5.01MB ZIP 举报
温馨提示
Red Panda C++(旧名称:Red Panda Dev-C++ 7)是一个快速,轻量级,开源和跨平台的C / C++ / GNU汇编IDE。
资源推荐
资源详情
资源评论
收起资源包目录
Red Panda C++是一个快速,轻量级,开源和跨平台的C/C++/GNU汇编IDE (1622个子文件)
epitrochoid_zh_CN.c 5KB
WinApp_zh_CN.c 2KB
main.c 422B
main.c 419B
main_zh_CN.c 402B
changelog 5KB
compat 3B
control 697B
copyright 3KB
mainwindow.cpp 347KB
ASFormatter.cpp 233KB
cppparser.cpp 220KB
qsynedit.cpp 214KB
editor.cpp 186KB
settings.cpp 165KB
asm.cpp 130KB
astyle_main.cpp 126KB
ASBeautifier.cpp 108KB
project.cpp 106KB
debugger.cpp 105KB
ASLocalizer.cpp 64KB
cpppreprocessor.cpp 59KB
codecompletionpopup.cpp 51KB
painter.cpp 47KB
darkfusionstyle.cpp 41KB
cpp.cpp 40KB
glsl.cpp 36KB
qconsole.cpp 36KB
lua.cpp 33KB
document.cpp 33KB
ASResource.cpp 27KB
projectcompiler.cpp 26KB
compiler.cpp 25KB
parserutils.cpp 24KB
colorscheme.cpp 24KB
iconsmanager.cpp 24KB
cpptokenizer.cpp 23KB
utils.cpp 19KB
ojproblemsetmodel.cpp 19KB
gitmanager.cpp 19KB
ASEnhancer.cpp 18KB
formattergeneralwidget.cpp 18KB
utils.cpp 18KB
compilermanager.cpp 18KB
bookmarkmodel.cpp 17KB
editorcolorschemewidget.cpp 17KB
classbrowser.cpp 17KB
compilersetoptionwidget.cpp 16KB
charsetinfo.cpp 16KB
searchinfiledialog.cpp 16KB
makefile.cpp 15KB
searchresultview.cpp 15KB
cpprefacter.cpp 15KB
main.cpp 14KB
editorlist.cpp 13KB
compilerinfo.cpp 13KB
gdbmiresultparser.cpp 12KB
settingsdialog.cpp 12KB
thememanager.cpp 11KB
main.cpp 11KB
headercompletionpopup.cpp 11KB
codesnippetsmanager.cpp 10KB
exporter.cpp 10KB
environmentfileassociationwidget.cpp 10KB
projectfileswidget.cpp 9KB
ojproblemcasesrunner.cpp 9KB
keystrokes.cpp 9KB
newprojectdialog.cpp 9KB
projecttemplate.cpp 9KB
executablerunner.cpp 9KB
main.windows.cpp 8KB
todoparser.cpp 8KB
freeprojectsetformat.cpp 8KB
projectgeneralwidget.cpp 8KB
htmlexporter.cpp 8KB
searchdialog.cpp 8KB
toolsgeneralwidget.cpp 8KB
cpudialog.cpp 8KB
compilerautolinkwidget.cpp 7KB
filecompiler.cpp 7KB
syntaxer.cpp 7KB
environmentshortcutwidget.cpp 7KB
settingswidget.cpp 7KB
main.unix.cpp 7KB
cppformatter.cpp 7KB
linenumbertexteditor.cpp 7KB
issuestable.cpp 6KB
editorgeneralwidget.cpp 6KB
gutter.cpp 6KB
functiontooltipwidget.cpp 6KB
projectcompilerwidget.cpp 6KB
customfileiconprovider.cpp 6KB
qtsupportedhtmlexporter.cpp 6KB
rtfexporter.cpp 5KB
editorfontwidget.cpp 5KB
newclassdialog.cpp 5KB
editormiscwidget.cpp 5KB
gitremotedialog.cpp 5KB
filepropertiesdialog.cpp 5KB
syntaxermanager.cpp 5KB
共 1622 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6656
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- kernel-ml-6.8.8-1.el7.elrepo.x86-64.rpm
- Labview基本框架之状态机
- HM2309B-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Git安全实践:保护你的代码仓库个人学习笔记.md
- 自动驾驶定位系列教程九:后端优化.pdf
- 三国志5威力加强版-windows
- HM2309A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM2306-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Git进阶技巧:提升团队协作效率个人学习笔记.md
- 自动驾驶定位系列教程八:建图系统结构优化.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功