Вы не вошли.
Страницы 1
Пишет нету доступа
Download dll, import GML scripts. Use...
Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL
Спасибо за ответ. Но текстура почему то не отображается. Поверхность просто белого цвета
Попытался написать шейдер освещения на GLSL. Сделал все как по инструкции, но почему-то на выходе получаю сплошной черный цвет.
Вот код
Вертексный шейдер
varying vec3 normal;
varying vec3 position;
void main() {
normal = gl_NormalMatrix * gl_Normal;
position = (gl_ModelViewMatrix * gl_Vertex).xyz;
gl_Position = ftransform();
}
Пиксельный шейдер
varying vec3 normal;
varying vec3 position;
vec3 light_pos;
void main() {
light_pos = vec3(0.0, 10.0, 0.0);
vec3 N = normalize(normal);
vec3 LN = normalize(light_pos - position);
float L = max(dot(N, LN), 0.0);
vec3 color = gl_FrontMaterial.diffuse * L;
gl_FragColor = vec4(color, 1.0);
}
Столкнулся с проблемой. Как правильно задать текстурные координаты, например, полигону. Насколько я знаю UV координаты задаются поочередно каждому вертексу. Здесь же координаты задаются всему мешу с помощью функции FreeformMeshSetTexCoord. Как правильно работать с этой функцией?
-------------------------------------------
Решил задавая функцией FreeformMeshAddTexCoord после каждого FreeformMeshAddVertex
Спасибо. Нормаль указал на (0,1,0). Заработало. Но освещение как-то криво работает, как это исправить? Полигон освещается только при приближении источника света к (0,0,0) позиции.
Вылетает игра при вызове функции FreeformMeshFaceGroupAddTriangle. В чем ошибка?
f = FreeformCreateEmpty(render.matlib, render.matlib, global.scene);
mesh = FreeformAddMesh(f);
fg = FreeformMeshAddFaceGroup(f, mesh);
v1 = FreeformMeshAddVertex(f, mesh, 0, 10, 0);
v2 = FreeformMeshAddVertex(f, mesh, 0, 10, 100);
v3 = FreeformMeshAddVertex(f, mesh, 100, 10, 100);
FreeformMeshFaceGroupAddTriangle(f, mesh, fg, v1, v2, v3);
При применении ObjectSetMaterial на Freeform пропадает прозрачность на остальных объектах, которую я задавал функцией MaterialSetBlendingMode. В чем может быть ошибка?
Спасибо большое! Теперь все работает! А что собственно она делает? (функция)
Как отключить сглаживание для материала? (Чтоб пиксели были видны квадратными, несглаженными). Или оно встроенно в Xtreme3d автоматически?
Функция MaterialSetBlendingMode решила мою проблему!
Как сделать возможным в Xtreme3d заставить материал поддерживать прозрачность. Может быть шейдером? Но не шибко силен в GLSL. Нужна помощь
Предлагаю добавить функции для работы с векторами (Dot/Cross product), а также вектора как объекты, чтоб проще было с ними работать. Как вам идея?
Вобщем, методом нехитрых манипуляций мне удалось решить эту задачу!
Для куба код следующий:
v1x = ObjectGetPosition(camPos,0) - ObjectGetPosition(obj,0);
v1z = ObjectGetPosition(camPos,2) - ObjectGetPosition(obj,2);
angle = MathDotProduct(v1x, 0, v1z, 1, 0, 0);
if (ObjectGetPositionZ(obj) > ObjectGetPositionZ(camPos)) {
angle = -angle;
} else {
angle = angle;
}
ObjectSetRotation(obj, 0, angle, 0);
Для плоскости чуть другой:
v1x = ObjectGetPosition(camPos,0) - ObjectGetPosition(obj,0);
v1z = ObjectGetPosition(camPos,2) - ObjectGetPosition(obj,2);
angle = MathDotProduct(v1x, 0, v1z, 0, 0, 1);
if (ObjectGetPositionX(obj) < ObjectGetPositionX(camPos)) {
angle = -angle;
} else {
angle = angle;
}
ObjectSetRotation(obj, 0, angle, 0);
Пришлось добавлять скрипт MathDotProduct дабы рассчитать угол между векторами.
Дело в том, что нужен поворот только по оси Y. Эта функция поворачивает по всем осям, насколько я понял
Всем привет, как заставить модель постоянно смотреть на камеру?
Использовал ObjectSetRotation(model, 0, ObjectGetTurn(camPos), 0), но ничего не выходит.
Спасибо за ответ!
Страницы 1