checkerシェーダーを再コンパイル。立方体にはshinyを割り当てる。
レイトレーシングしています。
#box_check.pyg
Output ("box_check.tif", "tiff", "rgb", "camera", "float gain", 1, "float gamma",
1, "string filter", "gaussian", "float[2] filterwidth", (2, 2))
Attribute ("float shadingquality",1.2)
Attribute ("string projection", "perspective")
Attribute ("float fov", 20)
Attribute ("int[2] resolution", (640, 480))
#placecam 10 5 -10 0 0 0
Rotate (-19.47, 1.00, 0.00, 0.00)
Rotate (45.00, 0.00, 1.00, 0.00)
Translate (-10.00, -5.00, 10.00)
#Attribute ( "int ray:shadows", 0 )
Attribute ("string geometryset", "+shadows")
Attribute ("string geometryset", "+reflection")
World ()
Light ("light1", "pointlight", "float intensity", 400, "point from", (-10, 10, -10),"string shadowname", "shadows")
Light ("light2", "pointlight", "float intensity", 400, "point from", (10, 10, -10),"string shadowname", "shadows")
PushTransform ()
Attribute ("color C", (0.2, 0.4, 0.75))
Sphere (100, -100, 100, 360)
PopTransform ()
for i in range(5):
PushTransform ()
Attribute ("color C", (1, 1, 1))
Shader ( "surface", "shiny", "float Kd", 0, "float Kr", 0.75, "float roughness", 0 )
#Shader ("surface", "plastic")
i=1.2*i
Translate ( 0, 0.5, i-2)
Input ("BoxGeom.rib")
PopTransform ()
Attribute ("color C", (1, 1, 1))
Rotate (90.00, 1.00, 0.00, 0.00)
ShaderGroupBegin ()
Shader ("surface", "checker","float frequency",10,"color blackcolor",(0, 0, 0))
#Shader ("surface", "plastic", "layer2")
#ConnectShaders ("layer1", "Cout", "layer2", "C")
ShaderGroupEnd ()
Input("PlaneGeom.rib")
Render()
ありがとうございます。さらに勉強します。
STANDARD PROCEDURAL DATABASES
http://tog.acm.org/resources/SPD/
これの実行ファイルを作成するのに試してみました。
以下、Windowsでの作業です。
MinGWをインストールする。
最新バージョンはインストール時にmakeも含まれているようで楽かも。
環境パスも設定します。
さてさて、コンパイルの作業をします。
gccのオプションは以下を参考にしました。
http://www.geocities.jp/woodwood77777/gcc.htm
makefile.dosを以下、書き換え
CC =gcc
CFLAGS =-O2
以下を実行します。
mingw32-make -f makefile.dos
libinf.cの32行目あたりで
"initializer element is not constant" と出て止まったら
変更前 FILE *gOutfile = stdout;
変更後 FILE *gOutfile;
以下を実行します。
mingw32-make -f makefile.dos
mingw/lib/libmingw32.a(main.o):main.c.text+0x104): undefined
reference to `WinMain@16'
エラーメッセージ
このあたり、エラーがでますが、くりかえしてみる。
mingw32-make -f makefile.dos
ちょっとうろ覚え、
CFLAGS =-mx
と変更して
mingw32-make -f makefile.dos
をくりかえしてみる。
以上、コンパイルのみ実行してリンクは後で行う。
以下のようなバッチファイルを作ってしまう。
作成したオブジェクトファイルをリンクさせる。
gcc -o balls.exe balls.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
以下はバッチファイル
gcc -o balls.exe balls.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o gears.exe gears.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o mount.exe mount.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o rings.exe rings.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o teapot.exe teapot.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o tetra.exe tetra.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o tree.exe tree.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readdxf.exe readdxf.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readnff.exe readnff.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o readobj.exe readobj.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o sample.exe sample.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o lattice.exe lattice.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o shells.exe shells.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o jacks.exe jacks.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o sombrero.exe sombrero.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
gcc -o nurbtst.exe nurbtst.c drv_null.o libini.o libinf.o libpr1.o libpr2.o libpr3.o libply.o libdmp.o libvec.o libtx.o -lm
できあがった実行ファイルがいくつかあります。
balls.exe
gears.exe
jacks.exe
lattice.exe
mount.exe
nurbtst.exe
rings.exe
sample.exe
shells.exe
sombrero.exe
teapot.exe
tetra.exe
tree.exe
balls.exe >balls.nff
でnffを出力します。
後は、XRT rendererでレンダリングしました。
balls.nff
lattice.nff
jacks.nff、これってケッソン先生のところで見たAOしてるブツのオリジナルになるのでしょうか。
いろいろと試してみたくなりました。
ありがとうございます。
Standard Procedural Databases のNeutral File Format (NFF) を出力するために、MinGW gccでオプション設定しなおし、ちょっとだけmakefileを理解できました。Windows用の、makefile.dos
です。
mingw32-make -f makefile.dos
でコンパイル、リンクします。
makefile.dos
# Makefile for the SPD stuff - generic for IBM clones,
# modify to support whatever compiler you have.
CC =gcc
#
CFLAGS2 =-o
CFLAGS =-O2
EXE = exe
OBJ = o
# DOS version:
#SPDOBJS = drv_ibm.$(OBJ) libini.$(OBJ) libinf.$(OBJ) libpr1.$(OBJ) libpr2.$(OBJ) libpr3.$(OBJ) libply.$(OBJ) libdmp.$(OBJ) libvec.$(OBJ) libtx.$(OBJ)
# other versions...
SPDOBJS = drv_null.$(OBJ) libini.$(OBJ) libinf.$(OBJ) libpr1.$(OBJ) libpr2.$(OBJ) libpr3.$(OBJ) libply.$(OBJ) libdmp.$(OBJ) libvec.$(OBJ) libtx.$(OBJ)
# Zortech specific graphics library
#LIBFILES=fg.lib
#LIBFILES=fgp.lib
LIBFILES=-lm
all: balls.$(EXE) gears.$(EXE) mount.$(EXE) rings.$(EXE) teapot.$(EXE) \
tetra.$(EXE) tree.$(EXE) \
readdxf.$(EXE) readnff.$(EXE) readobj.$(EXE) \
sample.$(EXE) lattice.$(EXE) shells.$(EXE) jacks.$(EXE) \
sombrero.$(EXE) nurbtst.$(EXE)
# Rule to compile c progs into obj's
.c.$(OBJ):
$(CC) $(CFLAGS) -c $<
# DOS only
#drv_ibm.$(OBJ): drv_ibm.c drv.h def.h
drv_null.$(OBJ): drv_null.c drv.h def.h
libini.$(OBJ): libini.c lib.h libvec.h drv.h
libinf.$(OBJ): libinf.c lib.h libvec.h drv.h
libpr1.$(OBJ): libpr1.c lib.h libvec.h drv.h
libpr2.$(OBJ): libpr2.c lib.h libvec.h drv.h
libpr3.$(OBJ): libpr3.c lib.h libvec.h drv.h
libply.$(OBJ): libply.c lib.h libvec.h drv.h
libdmp.$(OBJ): libdmp.c lib.h libvec.h drv.h
libvec.$(OBJ): libvec.c libvec.h
libtx.$(OBJ): libtx.c lib.h libvec.h drv.h
balls.$(EXE): balls.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) balls.$(EXE) balls.c $(SPDOBJS) $(LIBFILES)
gears.$(EXE): gears.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) gears.$(EXE) gears.c $(SPDOBJS) $(LIBFILES)
mount.$(EXE): mount.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) mount.$(EXE) mount.c $(SPDOBJS) $(LIBFILES)
rings.$(EXE): rings.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) rings.$(EXE) rings.c $(SPDOBJS) $(LIBFILES)
teapot.$(EXE): teapot.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) teapot.$(EXE) teapot.c $(SPDOBJS) $(LIBFILES)
tetra.$(EXE): tetra.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) tetra.$(EXE) tetra.c $(SPDOBJS) $(LIBFILES)
tree.$(EXE): tree.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) tree.$(EXE) tree.c $(SPDOBJS) $(LIBFILES)
readdxf.$(EXE): readdxf.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readdxf.$(EXE) readdxf.c $(SPDOBJS) $(LIBFILES)
readnff.$(EXE): readnff.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readnff.$(EXE) readnff.c $(SPDOBJS) $(LIBFILES)
readobj.$(EXE): readobj.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) readobj.$(EXE) readobj.c $(SPDOBJS) $(LIBFILES)
sample.$(EXE): sample.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) sample.$(EXE) sample.c $(SPDOBJS) $(LIBFILES)
lattice.$(EXE): lattice.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) lattice.$(EXE) lattice.c $(SPDOBJS) $(LIBFILES)
shells.$(EXE): shells.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) shells.$(EXE) shells.c $(SPDOBJS) $(LIBFILES)
jacks.$(EXE): jacks.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) jacks.$(EXE) jacks.c $(SPDOBJS) $(LIBFILES)
sombrero.$(EXE): sombrero.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) sombrero.$(EXE) sombrero.c $(SPDOBJS) $(LIBFILES)
nurbtst.$(EXE): nurbtst.$(OBJ) $(SPDOBJS)
$(CC) $(CFLAGS2) nurbtst.$(EXE) nurbtst.c $(SPDOBJS) $(LIBFILES)