2013-06-28 7 views
0

Следующий код R создает файл HTML и открывает его в браузере:WebGL рендеринг с RGL 0.93.935 R пакет

library(rgl) 
M <- rbind(
    c(0,0,0), 
    c(-1,4,0), 
    c(4,9,0), 
    c(6,3,0) 
) 
    quads3d(M,col='red') 
browseURL(paste("file://", writeWebGL(dir=file.path(tempdir(), "webGL"), 
      width=500), sep="")) 

Рандеринг интерактивный планарной многогранник в 3D-пространстве.

С последней версией пакета rgl (0.93.935), то HTML-рендеринга делает не работы для пользователей Windows, (а также пользователей IOS, я думаю) с конфигурацией по умолчанию браузера. С более старой версией 0.93.928, он работает.

Я разместил html output of rgl 0.93.928 и html output of rgl 0.93.935.

Я сообщил об этой проблеме на Duncan Murdoch (автор rgl), и он дал мне следующее решение для Firefox: тип и запустить «о: конфигурации» в адресной строке, и включить параметры webgl.prefer-native-gl и webgl.force-enabled до true. Затем работает рендеринг HTML.

Мои вопросы:

  • Как сделать с Google Chrome?

  • Можно ли что-то изменить в HTML-коде, чтобы рендеринг HTML работал с настройкой по умолчанию? (как для версии 0.93.928).

+0

Поскольку единственными отличиями в выходе являются шейдеры, я бы предложил попробовать скопировать shadercode из старой версии в новую. Кроме того, невозможно отладить эту проблему с таким большим количеством кода, который глубоко вложен в html-страницу. – havarc

+0

Здравствуйте @havarc. Вы имеете в виду часть кода от строки 12 до строки 78 для первой версии и от строки 12 до строки 80 для второй версии? –

+0

Ну, в этом проблема, я не вижу многого для начала. Единственное, что я мог сделать, это запустить ваши образцы страниц через инспектор html Firebug, поскольку все вставлено через javascript внутри javascript. Чтобы действительно отладить это, мне понадобится страница в простой HTML и JS. – havarc

ответ

1

Как трудно, так как решение проблемы было таким же простым решением.

В последней версии RGL я мог бы приобрести эту проблему находится внутри фрагмента шейдер выхода HTML:

varying vec4 vCol; // carries alpha 
varying vec4 vPosition; 
varying vec3 vNormal; 

vec3 eye = normalize(-vPosition.xyz); 
const vec3 emission = vec3(0., 0., 0.); 
const vec3 ambient1 = vec3(0., 0., 0.); 
const vec3 specular1 = vec3(1., 1., 1.);// light*material 
const float shininess1 = 50.; 
vec4 colDiff1 = vec4(vCol.rgb * vec3(1., 1., 1.), vCol.a); 
const vec3 lightDir1 = vec3(0., 0., 1.); 
vec3 halfVec1 = normalize(lightDir1 + eye); 

void main(void) { 
    vec4 lighteffect = vec4(emission, 0.); 
    vec3 n = normalize(vNormal); 
    n = -faceforward(n, n, eye); 
    vec3 col1 = ambient1; 
    float nDotL1 = dot(n, lightDir1); 
    col1 = col1 + max(nDotL1, 0.) * colDiff1.rgb; 
    col1 = col1 + pow(max(dot(halfVec1, n), 0.), shininess1) * specular1; 
    lighteffect = lighteffect + vec4(col1, colDiff1.a); 
    gl_FragColor = lighteffect; 
} 

он определяет переменные снаружи на основной функции, которая скачет значение задания и, таким образом, не может скомпилировать с неудачи с делением на нуль. Решение состоит в том, чтобы переместить начало главной функции над блоком определения непосредственно после различных значений:

varying vec4 vCol; // carries alpha 
varying vec4 vPosition; 
varying vec3 vNormal; 

void main(void) { 
    vec3 eye = normalize(-vPosition.xyz); 
    const vec3 emission = vec3(0., 0., 0.); 
    const vec3 ambient1 = vec3(0., 0., 0.); 
    const vec3 specular1 = vec3(1., 1., 1.);// light*material 
    const float shininess1 = 50.; 
    vec4 colDiff1 = vec4(vCol.rgb * vec3(1., 1., 1.), vCol.a); 
    const vec3 lightDir1 = vec3(0., 0., 1.); 
    vec3 halfVec1 = normalize(lightDir1 + eye); 

    vec4 lighteffect = vec4(emission, 0.); 
    vec3 n = normalize(vNormal); 
    n = -faceforward(n, n, eye); 
    vec3 col1 = ambient1; 
    float nDotL1 = dot(n, lightDir1); 
    col1 = col1 + max(nDotL1, 0.) * colDiff1.rgb; 
    col1 = col1 + pow(max(dot(halfVec1, n), 0.), shininess1) * specular1; 
    lighteffect = lighteffect + vec4(col1, colDiff1.a); 
    gl_FragColor = lighteffect; 
} 

Это покажет объект по желанию.

Возможно, вы захотите связаться с Дунканом Мердоком и отправить ему ссылку на это сообщение, если, как вы сказали, вы не разбираетесь в html и webgl.

+0

Спасибо! Я попробую сегодня. –

+0

Это работает !! http://pagist.github.io/?5936018 Спасибо. Кроме того, я отправил электронное письмо Дункану Мердоку, и он попросил меня признать вас! –

Смежные вопросы