[PDF]交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第6版)、随书代码

回复
头像
paktc
出类拔萃
出类拔萃
帖子: 65
注册时间: 2016年07月21日 20:34
联系:

[PDF]交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第6版)、随书代码

帖子 paktc »

[Interactive.Computer.Graphics:A.Top-Down.Approach.with.Shader-Based.OpenGL(6th.2011)].Edward.Angel.文字版.pdf
ed2k://|file|[Interactive.Computer.Graphics%EF%BC%9AA.Top-Down.Approach.with.Shader-Based.OpenGL(6th.2011)].Edward.Angel.%E6%96%87%E5%AD%97%E7%89%88.pdf|13149202|88105A4595B07D10689A0D96215F8E03|h=MFI7ZCU73C34TVILAUNLIXGNGU2FEMYC|/
随书代码
http://www.cs.unm.edu/~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/CODE/
批量(递归)下载该网页目录文件
use Encode;
use LWP::Simple;
use IO::Handle;
STDOUT->autoflush();

my $website = "http://www.cs.unm.edu/~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/CODE/";

func($website, "./Code/");

sub func
{
my ($website, $fold) = (shift, shift);
my $page = get($website) or warn "$!";

mkdir $fold if (! -e $fold);

print "$fold\n";

#根据文件大小的字段判断是否为文件并下载
while ( $page=~s/href="([^"]+)".*align="right">[\d\w\. ]+<//i )
{
print " " x 4 ."File: $1\n";
getstore( $website . $1, $fold . $1);
}

while ( $page=~s/folder\.gif.*href="([^"]+)"//i )
{
func($website . $1, $fold . $1);
#递进调用,文件夹列表的末尾总是带有斜杠
}

}
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

VC项目文件示例 6E_example1_VC10.zip 编译过程中遇到的问题

帖子 523066680 »

项目文件下载链接
INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/
6E_example1_VC10.zip

编译器版本,VS2010
其他环境配置:
1. 去freeglut官网找到 freeglut-MSVC.zip 版的压缩包下载解压
2. 去glew官网找到 glew-1.13.0-win32.zip 下载解压
我保存的位置分别是
D:\OGL\glew-1.13.0-win32
D:\OGL\freeglut-MSVC

然后用VS2010打开项目文件 6E test.sln,项目属性 > VC++目录 > 包含目录 添加 上面两个目录的include子目录
项目属性 > VC++目录 > 库目录,添加上面两个目录对应的lib目录,选32位的文件夹

编译过程中遇到的问题:
  1. error LNK1104: cannot open file 'freeglutd.lib'
    链接器的附加依赖项中并没有这一项。解决方法
    http://blog.csdn.net/yapingxin/article/details/46440307
    https://www.opengl.org/discussion_board ... -link-1104
    打开项目属性,在 C/C++ > 预处理器 > 预处理器定义 的设置中,增加一个宏定义 NDEBUG,点击插入
  2. fopen unsafe
    打开initShader.cpp,

    代码: 全选

    FILE *fp = fopen(shaderFile, "r");
    改为

    代码: 全选

        FILE* fp;
        fopen_s(&fp, shaderFile, "r");
  3. 运行提示
    fshader21.glsl failed to compile:
    0(2) : error C5060: out can't be used with non-varying color
    解决方法:
    打开,fshader21.glsl ,将 "out vec3 color;" 改为 "varying out vec3 color;"
    参考链接
    https://www.opengl.org/discussion_board ... ef0d05e0c8
  4. 再次运行,提示
    fshader21.glsl failed to compile:
    0(10) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
    解决办法:去掉多余的空白行、行末尾的空格符号
    http://stackoverflow.com/questions/1087 ... -undefined
    或者进入 \6E test\CODE 目录 将 fshader21.glsl 以及 vshader21.glsl 拷贝到程序运行目录中

    Debug 目录和 Release目录下附带的glsl文件居然和CODE目录下的不一致=_=
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

MinGW编译示例代码 - example1.cpp

帖子 523066680 »

环境和工具:
WIN7 64位,MinGW,MSYS2.0

配置:
  • 另外下载的库:
    freeglut-MinGW-3.0.0-1.mp.zip,glew-1.13.0.zip

    解压至
    D:\OGL\freeglut-MinGW-3.0.0-1.mp
    D:\OGL\glew-1.13.0

    freeglut已经是编译好了dll的,可以直接用。glew需要手动编译一次,打开MinGW-w64 Win32 Shell,进入D:\OGL\glew-1.13.0
    执行 make 命令
    $ make
    gcc -DGLEW_NO_GLU -DGLEW_BUILD -O2 -Wall -W -Iinclude -o tmp/mingw/default/shared/glew.o -c src/glew.c
    gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll tmp/mingw/default/shared/glew.o -L/mingw/lib -lopengl32 -lgdi32 -luser32 -lkernel32
    strip -x lib/glew32.dll
    gcc -DGLEW_NO_GLU -DGLEW_STATIC -O2 -Wall -W -Iinclude -o tmp/mingw/default/static/glew.o -c src/glew.c
    ar rv lib/libglew32.a tmp/mingw/default/static/glew.o
    a - tmp/mingw/default/static/glew.o
    ar: creating lib/libglew32.a
    strip -x lib/libglew32.a
    sed \
    -e "s|@prefix@|/usr|g" \
    -e "s|@libdir@|/usr/lib|g" \
    -e "s|@exec_prefix@|/usr/bin|g" \
    -e "s|@includedir@|/usr/include/GL|g" \
    -e "s|@version@|1.13.0|g" \
    -e "s|@cflags@||g" \
    -e "s|@libname@|glew32|g" \
    -e "s|@requireslib@|glu|g" \
    < glew.pc.in > glew.pc
    gcc -DGLEW_NO_GLU -DGLEW_MX -DGLEW_BUILD -O2 -Wall -W -Iinclude -o tmp/mingw/mx/shared/glew.o -c src/glew.c
    gcc -shared -Wl,-soname,libglew32mx.dll -Wl,--out-implib,lib/libglew32mx.dll.a -o lib/glew32mx.dll tmp/mingw/mx/shared/glew.o -L/mingw/lib -lopengl32 -lgdi32 -luser32 -lkernel32
    strip -x lib/glew32mx.dll
    gcc -DGLEW_NO_GLU -DGLEW_MX -DGLEW_STATIC -O2 -Wall -W -Iinclude -o tmp/mingw/mx/static/glew.o -c src/glew.c
    ar rv lib/libglew32mx.a tmp/mingw/mx/static/glew.o
    a - tmp/mingw/mx/static/glew.o
    ar: creating lib/libglew32mx.a
    strip -x lib/libglew32mx.a
    sed \
    -e "s|@prefix@|/usr|g" \
    -e "s|@libdir@|/usr/lib|g" \
    -e "s|@exec_prefix@|/usr/bin|g" \
    -e "s|@includedir@|/usr/include/GL|g" \
    -e "s|@version@|1.13.0|g" \
    -e "s|@cflags@|-DGLEW_MX|g" \
    -e "s|@libname@|glew32mx|g" \
    -e "s|@requireslib@|glu|g" \
    < glew.pc.in > glewmx.pc
    gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -o tmp/mingw/default/shared/glewinfo.o -c src/glewinfo.c
    gcc -O2 -Wall -W -Iinclude -o bin/glewinfo.exe tmp/mingw/default/shared/glewinfo.o -Llib -lglew32 -L/mingw/lib -lopengl32 -lgdi32 -luser32 -lkernel32
    strip -x bin/glewinfo.exe
    gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -o tmp/mingw/default/shared/visualinfo.o -c src/visualinfo.c
    gcc -O2 -Wall -W -Iinclude -o bin/visualinfo.exe tmp/mingw/default/shared/visualinfo.o -Llib -lglew32 -L/mingw/lib -lopengl32 -lgdi32 -luser32 -lkernel32
    strip -x bin/visualinfo.exe
    生成的 dll 和 lib文件位于 glew-1.13.0\lib 目录
编译、运行
  1. 进入随书示例代码 Code\CHAPTER02\WINDOWS_VERSIONS
  2. 修改 example1.cpp ,在 glewInit(); 前面加上 glewExperimental = GL_TRUE;
  3. 建立makefile文件,内容如下:
    MAIN=example1
    CC=g++

    LIBDIR= -LD:/OGL/glew-1.13.0/lib -LD:/OGL/freeglut-MinGW-3.0.0-1.mp/lib/x64
    INCDIR= -ID:/OGL/glew-1.13.0/include -ID:/OGL/freeglut-MinGW-3.0.0-1.mp/include -I../../include

    LIBS= -lfreeglut -lglew32 -lopengl32 -lwinmm -lgdi32

    $MAIN:
    ${CC} -o ${MAIN} ../../Common/InitShader.cpp $(MAIN).cpp ${INCDIR} ${LIBDIR} ${LIBS}
  4. 在终端执行 make (这里不要求在MSYS终端执行,可以在cmd.exe执行)
    检查是否生成 example1.exe
  5. 将 D:\OGL\freeglut-MinGW-3.0.0-1.mp\bin\x64\freeglut.dll 和 D:\OGL\glew-1.13.0\lib\glew32.dll 复制到执行文件所在目录,
    运行结果:
    Chapter02-Sierpinski.png
    (26.08 KiB) 已下载 2207 次
    如果提示

    代码: 全选

    ---------------------------
    example1.exe - 应用程序错误
    ---------------------------
    应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。 
    ---------------------------
    确定   
    ---------------------------
    通常是 freeglut.dll 或者 glew.dll 的版本不对(32位 64位的区别),或者这两个dll没有放置到运行环境中
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客