˂˂
http://coneneko.sourceforge.jp/

Digital Mars D programming language p3DCułÂƂB
ŏIڕW͔ėp̍3DCułB
JɂC^[tF[XpɂɕύXĂ܂Bo[WԂ̌݊͂܂B
̃Cuopengl, sdlĂ܂̂ŁÃ\bh̑̂܂ܗpł܂B

rfIJ[h̐\pixel shader 2.0ȍ~炢v܂B

RpC./lib/coneneko.libNĂB
C|[gpX./src ./src/opengl ./src/sdlłB
)
dmd foo.d conenekoYMDD\lib\coneneko.lib \
	-IconenekoYMDD\src -IconenekoYMDD\src\opengl -IconenekoYMDD\src\sdl


ECZX
Ec[
E
ETODO
E


---------------------------------------------------------------
CZX

Copyright (C) 2005- hideki_i
̃CuGPLCZX(v2)ŔzzĂ܂B
ڍׂ./gpl.txtB

ECZXKp͈
./srcfBNg̃t@CŁAȉ̃fBNgȊÔ̂ł
./src/glew2glext/glew
./src/opengl
./src/sdl


EŏĂȂR[hACu

glew
http://glew.sourceforge.net/
openglgwb_ABSDCZX
glew/auto/extensions/  ./src/glew2glext/glew/* ɕKvȕRs[܂B

opengl
http://shinh.skr.jp/d/porting.html
CZX(ŒׂƂ
./src/opengl/opengl.d
./src/opengl/openglu.d
./lib/opengl32.lib
./lib/glu32.lib
ɂꂼRs[܂B

sdl http://www.libsdl.org/index.php
http://shinh.skr.jp/d/porting.html
http://www.libsdl.org/download-1.2.php
http://www.libsdl.org/projects/SDL_mixer/
http://www.libsdl.org/projects/SDL_image/
http://www.libsdl.org/projects/SDL_ttf/
CZXLGPL
./src/sdl/*.d
./bin/*.dll
ɂꂼRs[܂B

libpng
CZXzlib
http://www.libpng.org/pub/png/libpng.html

zlib
CZXzlib
dmd̂̂gp
dmd\src\phobos\etc\c\zlib
make -fwin32.mak zlib.lib


E\[X

wi摜
ɂ񂱂̃z[y[W
http://guttari8.hp.infoseek.co.jp/

GtFNg
Detonation
http://www.vector.co.jp/soft/win95/art/se173882.html

ʉ
UE}b`CJ@Y
http://osabisi.sakura.ne.jp/m2/


---------------------------------------------------------------
c[

Eto_nanami.exe
gqmqo, mkm̃t@Cgq773̃t@C쐬c[łB
mqo̓^ZRCÃft@CAmkmmikotõ[Vt@CłB
mqoto_nanami.exeɃhbvƃ[V܂܂Ȃ773쐬ł܂B
mqomkmꏏto_nanami.exeɃhbvƃ[V܂773쐬ł܂B
f[^̒`Ȃꍇɂ͍쐬Ɏsꍇ܂B
./resource/mqo, mkmQlɂĂB
///////////////////////////////
-mqoɂ
sdef:subset[y][x]:
bdef:subset[y][x]:
ꂼmikotosdef: bdef:ɑΉ܂

0 <= x, 1 <= y
IuWFNg̍ŏsdef:subset[y][x]:邱ƂŃf[^̈ꕔsubsetƂėpł܂B
subsetɂ͈̃eNX`݂̂ݒł܂B
y = 0̓ftHgŎIɐ̂Ŏg܂B
y = 1͕\A\̐؂ւ\Ȃ̂ݒ肵܂B
y >= 2̓[tACeƂėp܂B

Ⴆ΁A"sdef:subset[1][0]:0", "sdef:subset[1][1]:1"ƂIuWFNgƁA
0A1̕\𐧌ł悤ɂȂ܂B

"sdef:subset[2][0]:", "sdef:subset[2][9]:"ƂIuWFNgƁA
subset[2][1]subset[2][8]܂ł͕⊮Asubset[2][tACeƂėpł܂B

̃IuWFNgŎgeNX`͈Ȃ̂ŒӂĂB
IuWFNgŃeNX`gȂꍇ́ÃIuWFNgɕ̃}eA𗘗pł܂B
///////////////////////////////
rfIJ[h̐\Ɉˑ܂A{[Ȃƕ`ł܂B
ꍇ̓fɕă{[炷ƕ`ł邩܂B
-NXV~[V
to_nanami -cloth hoge.773
͂̓_CNVA_ushort.max(65535)܂
Esubset[1][n]I
EfixingVertex(Œ蒸_)͈ x0 y0 z0  x1 y1 z1
Espring(߂낤Ƃ)
Eresistance(R)[0.0, 1.0]


Enanami_viewer.exe
773\c[łB
773nanami_viewer.exeɃhbvĎg܂B


Escene_editor.exe
SceneViewȂeLXgҏWłeLXgGfB^łB
coneneko.sceneview.SceneViewNX̃r[Ă܂B
GfB^ŃR[hF5Ńr[ɔfƂTCNŊJ邱Ƃz肵Ă܂B
./src/test/scene0.d͂̃GfB^ŏ܂B


Eglew2glext.exe
glew̃eLXgd̃R[hɕϊc[łB


---------------------------------------------------------------


̃CuubN{bNXȂ
openglȊO̎ɂłe^Ȃ
SDL̃\bhőΉł̂̓bvȂ

c[ȂǂŎf[^(R[h܂)̓R~bgȂ

J̒lcmPʂ炢A^ZRCAŏo͂WcmPʂň

 1:1.618
 1:1.414

eNX`̃TCY2^n

_͏ȂقA{[͌E܂ŏȂ

A[LeN`I̎זɂȂȂxɎ
Rg[̓Cuɂł邾܂܂ȂAO̓Ȃ
̃A[LeN`ɂˑ邱ƂɂȂ

tړTimeIteratorŎAŜ̑x𒲐ł邩
CuSDL_GetTicks()pԂւ̈ˑ͔

\IIuWFNgł̎

PȐ}`ł_P`ȂA⊮ŐmȐloȂꍇ
/ w̃^C~O?
vertex shaderōsƕ⊮܂Ȃ̂pixel shaderłׂ?

test.dɃeXg܂Ƃ߂A26܂Ŏg玗̂𓝍Ă䂭

/resource 킩₷OȂꍇa, b...ƕt
t[YOmqof[^ɂn_.mqo, t[Yn.mqo

Object o;
assert(o);
avôassert(o !is null)ɕύXAif(o)͗L
ǐ܂悭ȂboolȊOif (n) or if (!n)̋Lq͎gȂ

SceneGraphUnitɂƁAɂȂȂ
֐ƁA@\ŃbgȂI

openglWɂ
modelViewProjection / w̉W͈͂xyz[-1, 1)ŁAz-1O  (z[-1, 1]̏ꍇ?)
fragment shaderɓnl͍W(0, 0)̉EオAsizewindow̃NCAg̈̃TCY
viewport͂ꂪɂȂAz[0, 1)O0.0Aw1/w0(ZɎg?)
eNX`lA摜̍W(0, 0)ɂȂA㉺tȂ̂Ńt@Cւ̓ǂݏɂ͒

Vector.w MatriẍɒӁAW


---------------------------------------------------------------
TODO

{[ÂƂ34炢EÂȂɎg悤, 40炢܂ł͎g炵?

NXV~ Q̉o(xZȂ)Anormal

G[̓NXƃbZ[W𖾊mɏ__LINE__, __FILE__͕sv?

cleanłł菉Ԃɖ߂悤ɏC

framebufferobject lɃ_Oł悤ɁAKvȂ

TimerThread̓A[LeN`ɉe^ꍇ̂ŃCuŎgȂ

\[XñNXɂ͂ł邾clonẽNXdecorator, dup̓ftHg̔zƍ̂ŎgȂ
lib[XƃfobO̓ɕĂ
invariant()𗘗pĎsG[ȊOassertŒǂo

t̂̕\

shadow buffertoon̉eaɁAhsvaŉe󂯂āAnCCg ł邾ȂpXŌq

Kvȃ\[X̓A^CɐASerializerhŃt@Cɏo

^͉BӖȂ̂opengl̂܂܂ł܂ȂAɂȂȂ

font textureflyweight

font.defaultSize͂̂64

rgba32falphablendɂ̂Ԃ?alphablend off̏ꍇ͂܂d͂ȂȂ
alphablend offrendertargetalphal`Aʂ̃sNZ
fragment shadertextureǂݏ́A[0, 1]clamp炸floatƂĎg悤A-g
vertexfragmentւ̗vf[0, 1]clampArendertarget̃tH[}bg͊֌WȂ

structclass
structƂĎg郁bgfbg̕
interface, pARXgN^gȂAȂ
opZqĝœɕsւȂƂȂ
class Color : Vectorł邵
MqoNormal*s͎AMqohĎg
AVector, Matrix͉e͈͂̂łlĂ
tstruct̃bgnewȂŎg邱
ƋLqʂ̖Anew White() or white()newȂ̕Z
萔ɂł镔萔̂D悩?
x ςȂAo[̂܂܂̕Rs[ōȂACuTD

Vector, MatrixCuT

ddocŐ郊t@X͍ŏAp̂ɕKvȕÂ͉̂B
ʂȂƒT̂ɎԂ̂ŕKv̂Ȃ͌Ȃ
KvȂΕʂ̃t@XƂĒǉ
lĂAt@XQƂ郁bgő傫Ȃɂ?

morphshaderōAeNX`modelPʂŋL
[index, t] index1ȏ, 0̓ftHg, tmorphpŏȗł
0pnct or pnctmw, 1ȏpnct or cloth or pnctp
subset(pnct), wmt(pnctmw), morph(pnctp), cloth(pnct+a?)𑮐(class?)ɂĔzł܂Ƃ߂
{[̏ꍇAmwȊOɂ͋߂boneworldݒ肷, boneIndexKv?
vertexmatrixindex, weight, pnctmodel(͕ʂ̃t@C)
pnctData, pnctmwData, pnctpData, pnct, pnctmw, pnctpɕ
Ƃshaderł̂modelshader
\̕ω⃂[V̏ԂȂǂl
subsetɕ邱Ƃ\?scenegraphł̈lƕȂ
mqõt[Y⍇mikotoOŏI点Ă?resource̓t[YO̓Aa.mqo, a_.mqo

ModelsubsetwŃUCN(or ̃tB^)悤

toonshadertexture1폜āApixelshaderŏ?
toonshader̃GbW͖@ŏox smoothłȂꍇɂ܂ȂAA^CɏofOłقꂢɏo

container.indexOfis, ==̋ʂɂA폜?

viewportRenderTarget.draẅɂAor Camera
textureSize̖̓n[hhCoŉ̂ł҂?
΂炭̊Ԃ́AviewportŒ512x512 or 1024x512ftHg̃EBhETCYɂʓ|Ȃ?

noise?noiseglslΉ̂ŁAȏ㎩͂łKv͂Ȃ

_tɎg`ŏɂ
eNX`ɏڂԂŁAgݍ킹̂

serializerɂĂ܂Ƃ߂, ModelDataӂ?
TODOŕKvȂ̂폜
͂܂Ƃ߂wiki̕Ɉڂ

key downCxgŃEBhE؂ւƁAkey upCxg󂯎Ȃ
tH[JX߂ĂAL[Ԃꂽ܂܂Ȃ̂ŃNAĂ

subsetɕtexturegƃfbg
subset { vertices, texture }ɂ
̃tH[}bgĂl

model_viewerA3dZ[uA܂Ɉʒu
worldϊ̈ʒuŃZ[uĂ
serializeOɁAworld array΂

R[h̊Kw
interfaceƈˑ֌Wx[XɒuA̓TufBNg
GɂȂ
ˑ֌W͑PAPȂǕGɂȂĊKŵ͓̂
ޒxɂĂ
-units
-collections
...
ޕ@ׂA܂ނłȂ悤Ȃ炱̂܂
ނقǋK͂傫ȂA͍lȂĂ悳phobosK͂傫Ȃl
WbNwƃ[U[C^[tF[XwŃTufBNgALĎĝ̓[g
܂K͂̂ŕȂ

Model.shaderModelShaderModelShader[]ɕύXĕpXłł悤?
rendertargetAlĂ

quaternion̕⊮܂Ƃ
mkmǂݍ݂keyframeĂ\

ZɔCӎ(delta)Ƃė^悤ɂ
`ƉZ̎Ԃ͕A`ɎԂ͕KvȂ̂ō폜

ddocp̃R[hRg܂߂ɏ

Window.updatedraw, sleep(1), doEvents炢ŁAȒPȃeXgƂɕ֗Ȃ̂Ŏc
updatedraw, flip, sleep, doEvents
fps̓Windowo
x Window.drawSDL_GL_SwapBuffers();sׂ
x Window.rgbaglReadBuffer(GL_BACK);GL_FRONTɕύXKv?

drawflipƘAŏގ肪ȂȂ̂łȂƂ
Window has BackBufferdrawdraw, flipɕ
BackBuffer.rgbaGL_BACK
flipRenderTargetWindowɕ`悷AbackbufferȂswap
BackBufferSDLˑȂ悤Ɏł?
backbuffer.d sdlւ̈ˑȂ̂ŉ\
RenderTarget.width, height, flip̂낤?
flip(RenderTarget)?A͋߂

RgbaRenderTarget𓝍ł΂
obt@̃tH[}bgɂȂĂ

scenegraph.d
FSAAAShadowBufferȂǂ
SceneGraph̔hƂĂ܂Ƃ߂
rendertarget to rendertargetscenegraph to rendertargetɂȂĂ邩
fbo.draw(new Fsaa());

viewportRenderTargetɎ?
size̐ȂȂviewportg@͂ȂȂ邾낤?

tree -> plane
plane + plane -> plane
tree + plane -> plane
͂̑I݂ĂAǂꂪœKȂ̂fɂ̓TvȂ
shaderP̂ňӖ̂NXƁA
shader+̏ƂscenegraphňӖ̂NXɕ

̃TCY͉ʃTCYɑ΂鑊ΓIȑ傫ł邱Ƃ]܂
planeAmouse.pos̒Pʂ킹
wndTCYւ̈ˑȂȂ郁bg
plane͍E͈̔͂g
Ŝ̍W͈͂[-1, 1)
WAwidth, height͈̔͂ɏ
񎩑͈̂͂̔͂̍ォ珑
modelViewProjectionň₷̂Ŕ͈͂[-1, 1)ōŝ낤
PlaneImage̍WA摜f[^͍ォ
plane camera, plane render statej
plane*textboard, imageboardɖ߂
ΓIȒlňAwnd.size, renderState.sizeւ̈ˑ؂
łtextureTCYĂ̂ŁAȂȂĂ
textureɑ΂ĕ`悷AimageƓlɈ
TextBoard(string, p, size, color, texsize, font)

dvȃNX͓ƗÃNXւ̈ˑ}(͕)
f[^`p̃NX͎󓮓I
translatorcloth_vZNXȂǂ͔\I

Fiber̃eXg

RXgN^ł낢ȃf[^ݒ肷ƉǐႢ
vpeBpӂĂŐݒ肷ƁAvpeBǐ߂B
łł悤ɏAx݂߂邱ƂłɁB
fluent interfaceŏƁARXgN^ȂɂłB
ȊOɂ̐\bh͈l̗]nB
R[hCɉǐꍇ̓t@XQƂKvȂȂB
߂ɁARXgN^̈폜āAuĂ݂?
hreturn this;Ȃ삷炵
fluent interface, Unit̔hNXł͎g₷AȊOł͐Td

̊Ԃ́A̍폜͂ȂAǉƏC

MatrixclassɂLookAt : MatrixPerspective : Matrixɂ֐
class Matrix2, decoratorƂĂ̎
fluent interfaceɂłAMatrixvpeBlւ̕ϊłȂ?

ModelShader̎ƊȌɂ邩A̕ӂSĂubN{bNX

perspectiveFovnearݒ肵ƁAz̕܂ȂƂ

gl_FragCoord.z[0.0, 1.0] _̋Anearɋ߂ق0.0, farɋ߂ق1.0
wZς݂̐lĂ݂Ȃ̂ŁAZȂĂ

updateőSĂ_OȂOupdate͎gȂ

dsl
V[c[ōAV[vpeBւ̃ANZXŃV[Ɋ
c[͍邩AgAKvȕ邩

eXgtH_āAtestēƗ
htmlrdmdŋNł悤ɂĂ?́AȒPȃeXg`
Tv͏ǁAʂeXg鎞Ԃ悤ɂȂ̂ŁA


---------------------------------------------------------------
(傫ȕύX) ymdd

7b05 dmd v1.023
7b04 to_nanami̕ϊCuɂقڈړI, rename nanami_viewer model_viewer
7829 scene_viewerj
7708 repositorycvssubversion
7323 scene_editor폜Ascene_viewer
6a14 release
6a14 CZXGPLv2ɕύX
6a13 dmd v0.169
6929 visual_editor폜
6921 glew, opengl, sdl̊OCu|Wgɒǉ
6911 dmd v0.166ɑΉ
6909 At@O
