2012-06-17 9 views
8

Jak włączyć rozszerzenie w module cieniującym Three.js?Włączanie rozszerzenia dla modułu cieniującego Three.js

Mój kod do tej pory:

coraz rozszerzenie:

var domElement = document.createElement('canvas'); 
var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives'); 

na moim shadera:

fragmentShader: [ 
    "#extension GL_OES_standard_derivatives : enable", 
    "code..." 
]... 

Wyjście Konsola:
UWAGA: 0:26: extension 'GL_OES_standard_derivatives' nie jest obsługiwany
BŁĄD: 0:32: "dFdx": nie znaleziono dopasowanej funkcji przeciążonej
BŁĄD: 0:32: '=': nie można przekonwertować z 'const mediump float' na '2-component vector of float'
BŁĄD: 0:33: "dFdy": nie znaleziono pasującej funkcji przeciążonej
BŁĄD: 00:33: „=”: nie można przekonwertować z „const mediump pływaka” na „2-składnik wektora pływaka”

Po przeczytaniu this issue on github, próbowałem ten przykład: od http://jsfiddle.net/VJca4/ otrzymuję te błędy

OSTRZEŻENIE : 0:27: rozszerzenie 'GL_OES_standard_derivatives' nie jest obsługiwane
BŁĄD: 0:30: '=': nie można przekonwertować z 'const mediump float' na '2-component vec tor float '
BŁĄD: 0:31:' dFdx ': nie znaleziono pasującej funkcji przeciążonej
BŁĄD: 0:31:' = ': nie można przekonwertować z' const mediump float 'na' 2-component vector of float '

+0

jsfiddle miał brakujące vec2 i Three.js był zbyt stary - patrz http: // jsfiddle .net/VJca4/9/to działa całkowicie) – makc

Odpowiedz

6

Należy także być w stanie to zrobić:

renderer.context.getExtension('OES_standard_derivatives'); 
+0

Jak to zrobiłeś? Mam bardzo podobny problem. – Hobbes

+0

Też mam ten problem. Nazywam 'renderer.context.getExtension ('GL_OES_standard_derivatives');' ale dostaję 'ERROR: 0: 114: 'GL_OES_standard_derivatives': rozszerzenie jest wyłączone' kiedy próbuję utworzyć' ShaderMaterial' z mojego kodu shadera. Jeśli skompiluję moduł cieniujący w zwykłym webgl z '#extension GL_OES_standard_derivatives: enable' w pierwszym wierszu, to działa. – matth

+3

Wydaje się, że sposobem na wykonanie tego w aktualnej bazie kodu three.js jest ustawienie 'derivations = true' w' ShaderMaterial' na tworzenie. – matth

1

Znaleziono błąd. Trzeba użyć elementu DOM renderującego za:

var gl = renderer.domElement.getContext('webgl') || 
      renderer.domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives');