İç Eşleme kendini gölgeleme shader
Joost van Dongen Interior mapping shader düzeltmeler yapıyorum ve öz-gölgeleme uygulamak için çalışıyorum. Hala oldukça gölge düşüren ışık vektör koordinatları ne olması gerektiğini çözemedim. Biraz at here demo bir ışık pozisyonu kamera konumuna uzaklığı sadece ne görmek ekledim çalıştığını görebilirsiniz ama anlaşılan doğru görünmüyordu. Shader kodu aşağıdadır. GÖLGELER parça gölgelendirici DEV arayın. Söz konusu paragraf var:shad_Eveshad_İ.
shader köşe:
varying vec3 oP; // surface position in object space
varying vec3 oE; // position of the eye in object space
varying vec3 oI; // incident ray direction in object space
varying vec3 shad_E; // shadow light position
varying vec3 shad_I; // shadow direction
uniform vec3 lightPosition;
void main() {
// inverse veiw matrix
mat4 modelViewMatrixInverse = InverseMatrix( modelViewMatrix );
// surface position in object space
oP = position;
// position of the eye in object space
oE = modelViewMatrixInverse[3].xyz;
// incident ray direction in object space
oI = oP - oE;
// link the light position to camera for testing
// need to find a way for world space directional light to work
shad_E = oE - lightPosition;
// light vector
shad_I = oP - shad_E;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
parça gölgelendirici:
varying vec3 oP; // surface position in object space
varying vec3 oE; // position of the eye in object space
varying vec3 oI; // incident ray direction in object space
varying vec3 shad_E; // shadow light position
varying vec3 shad_I; // shadow direction
uniform vec3 wallFreq;
uniform float wallsBias;
uniform vec3 wallCeilingColor;
uniform vec3 wallFloorColor;
uniform vec3 wallXYColor;
uniform vec3 wallZYColor;
float checker(vec2 uv, float checkSize) {
float fmodResult = mod( floor(checkSize * uv.x) floor(checkSize * uv.y), 2.0);
if (fmodResult < 1.0) {
return 1.0;
} else {
return 0.85;
}
}
void main() {
// INTERIOR MAPPING by Joost van Dongen
// http://interiormapping.oogst3d.net/
// email: joost@ronimo-games.com
// Twitter: @JoostDevBlog
vec3 wallFrequencies = wallFreq / 2.0 - wallsBias;
//calculate wall locations
vec3 walls = ( floor( oP * wallFrequencies) step( vec3( 0.0 ), oI )) / wallFrequencies;
//how much of the ray is needed to get from the oE to each of the walls
vec3 rayFractions = ( walls - oE) / oI;
//texture-coordinates of intersections
vec2 intersectionXY = (oE rayFractions.z * oI).xy;
vec2 intersectionXZ = (oE rayFractions.y * oI).xz;
vec2 intersectionZY = (oE rayFractions.x * oI).zy;
//use the intersection as the texture coordinates for the ceiling
vec3 ceilingColour = wallCeilingColor * checker( intersectionXZ, 2.0 );
vec3 floorColour = wallFloorColor * checker( intersectionXZ, 2.0 );
vec3 verticalColour = mix(floorColour, ceilingColour, step(0.0, oI.y));
vec3 wallXYColour = wallXYColor * checker( intersectionXY, 2.0 );
vec3 wallZYColour = wallZYColor * checker( intersectionZY, 2.0 );
// SHADOWS DEV // SHADOWS DEV // SHADOWS DEV // SHADOWS DEV //
vec3 shad_P = oP; // just surface position in object space
vec3 shad_walls = ( floor( shad_P * wallFrequencies) step( vec3( 0.0 ), shad_I )) / wallFrequencies;
vec3 shad_rayFr = ( shad_walls - shad_E ) / shad_I;
// Cast shadow from ceiling planes (intersectionXZ)
wallZYColour *= mix( 0.3, 1.0, step( shad_rayFr.x, shad_rayFr.y ));
verticalColour *= mix( 0.3, 1.0, step( rayFractions.y, shad_rayFr.y ));
wallXYColour *= mix( 0.3, 1.0, step( shad_rayFr.z, shad_rayFr.y ));
// SHADOWS DEV // SHADOWS DEV // SHADOWS DEV // SHADOWS DEV //
// intersect walls
float xVSz = step(rayFractions.x, rayFractions.z);
vec3 interiorColour = mix(wallXYColour, wallZYColour, xVSz);
float rayFraction_xVSz = mix(rayFractions.z, rayFractions.x, xVSz);
float xzVSy = step(rayFraction_xVSz, rayFractions.y);
interiorColour = mix(verticalColour, interiorColour, xzVSy);
gl_FragColor.xyz = interiorColour;
}
CEVAP
Garip böceğin böyle büyük mükafat 4.2 sabit! Sorun gizli şifre iletişim, çalışır ve bazen çok bazen. Olası çözümlerden biri olduğu:
- Araçları Çalıştırın
- Böyle büyük mükafat Cmd Tab aletleri kapsayan. Döngüsü ve parola iletişim bulunana kadar iletileri gizle.
- Yakın Güncellemelerinden.
Cevap için geç bir kaç yıl olduğunu biliyorum, sadece cevapsız sorular arıyordum. PS: - ^Cevap olarak sadece kontrol edin . ikimiz için de iyi oldu. )
ES 2.0 Birden fazla Program veya Birde...
jQuery belge.hazır vs kendini çağıran ...
Hızlı permütasyon -> dizi> permü...
Varlık Çerçevesi Bire Bir Eşleme Sorun...
Hiç kendini dil özellikleri bir alt kü...