Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Результаты опроса: Надо?
Да - круто 2 14.29%
Нет - лажа 2 14.29%
Может и надо но не мне 10 71.43%
Голосовавшие: 14. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы
Старый 15.11.2011, 12:37   #16
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

Да вроде матрицы, может еще чего
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 14:12   #17
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

Обновлено 15.11.2011 13:10
Изменена структура (спасибо pax)
Добавлена структура enum KeyCodes
Добавлены статические D3DXMATRIX - типы
Изменена функция SetEffectMatrix, в качестве value она принимает D3DXMATRIX
Улучшена организация памяти, добавлены hashTables для наиболее распространенных типов объектов Entity, Surface, Brush, Texture, World
По всем косякам обращаться ко мне =). Кстати там непонятка, например D3DXMATRIX EntityMatrix тоже тип d3dxmatrix который хранит в себе хэндл.. следовательно я матрицу из энтити могу запихнуть в SetEffectMatrix, это правильно?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
is.SarCasm (15.11.2011), moka (15.11.2011), pax (15.11.2011)
Старый 16.11.2011, 23:00   #18
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

Наработал небольшой редактор, альфа версия, для моего враппера
Посмотрите на моем сайте

Vector3 может сохранять вершину в ToString()
Entity имеет функцию State.GetPath() это его путь включая всех родителей
Entity имеет функцию State.GetChildFromPath - получить потомка из указанного пути


Люди. Кто знает если в максе создать анимированную модель на сцене, загрузить эту сцену with childs, найти анимационный entity. Будет ли он играть анимацию?
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 11:51   #19
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

Я бы сделал вот такую реализацию Vector3:
using System;

namespace 
Xors
{
    public 
struct Vector3
    
{
        public 
float X;
        public 
float Y;
        public 
float Z;

        public 
Vector3(float x 0float y 0float z 0)
        {
            
xyz;
        }

        public 
override string ToString()
        {
            
//return X + ";" + Y + ";" + Z + ";";
            
return String.Format("{0:0.00};{1:0.00};{2:0.00}"XYZ);
        }


        
// возвращает нормализованный вектор
        
public Vector3 normalized
        
{
            
get
            
{
                return 
Vector3.Normalize(this);
            }
        }

        
// возвращает длину вектора
        
public float magnitude
        
{
            
get
            
{
                return (float)
Math.Sqrt(Z);
            }
        }

        
// возвращает длину вектора в квадрате
        
public float sqrMagnitude
        
{
            
get
            
{
                return 
Z;
            }
        }

        
// возвращает нулевой вектор
        
public static Vector3 zero
        
{
            
get
            
{
                return new 
Vector3(0f0f0f);
            }
        }

        
// возвращает единичный вектор
        
public static Vector3 one
        
{
            
get
            
{
                return new 
Vector3(1f1f1f);
            }
        }

        public static 
Vector3 forward
        
{
            
get
            
{
                return new 
Vector3(0f0f1f);
            }
        }

        public static 
Vector3 back
        
{
            
get
            
{
                return new 
Vector3(0f0f, -1f);
            }
        }

        public static 
Vector3 up
        
{
            
get
            
{
                return new 
Vector3(0f1f0f);
            }
        }

        public static 
Vector3 down
        
{
            
get
            
{
                return new 
Vector3(0f, -1f0f);
            }
        }
        public static 
Vector3 left
        
{
            
get
            
{
                return new 
Vector3(-1f0f0f);
            }
        }

        public static 
Vector3 right
        
{
            
get
            
{
                return new 
Vector3(1f0f0f);
            }
        }

        
// оператор сложения векторов
        
public static Vector3 operator +(Vector3 oneVector3 other)
        {
            return new 
Vector3(one.other.Xone.other.Yone.other.Z);
        }

        
// унарный оператор отрицания
        
public static Vector3 operator -(Vector3 v)
        {
            return new 
Vector3(-v.X, -v.Y, -v.Z);
        }

        
// оператор вычитания
        
public static Vector3 operator -(Vector3 oneVector3 other)
        {
            return new 
Vector3(one.other.Xone.other.Yone.other.Z);
        }

        
// оператор умножения вектора на число
        
public static Vector3 operator *(Vector3 afloat d)
        {
            return new 
Vector3(a.da.da.d);
        }

        
// оператор умножения вектора на число
        
public static Vector3 operator *(float dVector3 a)
        {
            return new 
Vector3(a.da.da.d);
        }

        
// оператор деления вектора на число
        
public static Vector3 operator /(Vector3 afloat d)
        {
            return new 
Vector3(a.da.da.d);
        }

        
// оператор равенства векторов
        
public static bool operator ==(Vector3 lhsVector3 rhs)
        {
            return 
SqrMagnitude(lhs rhs) < 1E-9f;
        }

        
// оператор неравенства векторов
        
public static bool operator !=(Vector3 lhsVector3 rhs)
        {
            return 
SqrMagnitude(lhs rhs) >= 1E-9f;
        }

        public 
override int GetHashCode()
        {
            return 
X.GetHashCode() ^ Y.GetHashCode() << Z.GetHashCode() >> 2;
        }

        public 
override bool Equals(object other)
        {
            if (!(
other is Vector3))
            {
                return 
false;
            }
            return 
this == (Vector3)other;
        }

        
// функция нормализации вектора
        
public static Vector3 Normalize(Vector3 value)
        {
            
float num Magnitude(value);
            if (
num 1E-05f)
            {
                return 
value num;
            }
            return 
zero;
        }

        
// функция нормализации текущего вектора
        
public void Normalize()
        {
            
float num Magnitude(this);
            if (
num 1E-05f)
            {
                
this /= num;
            }
            else
            {
                
this zero;
            }
        }

        
// функция расчета расстояния между точками
        
public static float Distance(Vector3 aVector3 b)
        {
            var 
vector = new Vector3(a.b.Xa.b.Ya.b.Z);
            return (float)
Math.Sqrt(vector.vector.vector.vector.vector.vector.Z);
        }

        
// функция расчета длины вектора
        
public static float Magnitude(Vector3 a)
        {
            return (float)
Math.Sqrt(a.a.a.a.a.a.Z);
        }

        
// функция расчета длины вектора в квадрате
        
public static float SqrMagnitude(Vector3 a)
        {
            return 
a.a.a.a.a.a.Z;
        }

        
// линейная интерполяция векторов
        
public static Vector3 Lerp(Vector3 fromVector3 tofloat t)
        {
            
t;
            
t;
            return new 
Vector3(from.+ (to.from.X) * tfrom.+ (to.from.Y) * tfrom.+ (to.from.Z) * t);
        }

        
// масштабирование текущего вектора значениями другого вектора
        
public void Scale(Vector3 scale)
        {
            
*= scale.X;
            
*= scale.Y;
            
*= scale.Z;
        }

        
// векторное произведение векторов
        
public static Vector3 Cross(Vector3 lhsVector3 rhs)
        {
            return new 
Vector3(lhs.rhs.lhs.rhs.Ylhs.rhs.lhs.rhs.Zlhs.rhs.lhs.rhs.X);
        }

        
// функция вычисляет вектор отражения
        
public static Vector3 Reflect(Vector3 inDirectionVector3 inNormal)
        {
            return -
2f Dot(inNormalinDirection) * inNormal inDirection;
        }

        
// скалярное произведение векторов
        
public static float Dot(Vector3 lhsVector3 rhs)
        {
            return 
lhs.rhs.lhs.rhs.lhs.rhs.Z;
        }

        
// угол между векторами
        
public static float Angle(Vector3 fromVector3 to)
        {
            var 
dot Dot(from.normalizedto.normalized);
            
dot dot < -? -dot;
            
dot dot dot;
            return (float)
Math.Acos(dot) * 57.29578f;
        }

        
// возвращает вектор с минимальными значениями каждой составляющей двух векторов
        
public static Vector3 Min(Vector3 lhsVector3 rhs)
        {
            return new 
Vector3(Math.Min(lhs.Xrhs.X), Math.Min(lhs.Yrhs.Y), Math.Min(lhs.Zrhs.Z));
        }

        
// возвращает вектор с максимальными значениями каждой составляющей двух векторов
        
public static Vector3 Max(Vector3 lhsVector3 rhs)
        {
            return new 
Vector3(Math.Max(lhs.Xrhs.X), Math.Max(lhs.Yrhs.Y), Math.Max(lhs.Zrhs.Z));
        }

        public 
bool Equals(Vector3 other)
        {
            return 
this == other;
        }


    }

__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 17.11.2011 в 14:54.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
dsd (17.11.2011), moka (17.11.2011), pozitiffcat (17.11.2011), St_AnGer (17.11.2011)
Старый 17.11.2011, 12:38   #20
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

Половину математических функций я не понял, но все равно да будет так )))
Блин не получается запилить deferred shading. Без этого шейдера, вся графика отстает на 10 лет
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 12:53   #21
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Написал c# враппер

я бы Equals сделал лучше так:
public bool Equals(Vector3 other)
{
return (other-this).sqrmagnitude < eps;
}
, хотя возможно в Equals для float-а уже предусмотрели проблему с погрешностью флоата.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (17.11.2011)
Старый 17.11.2011, 13:03   #22
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

Сообщение от HolyDel Посмотреть сообщение
хотя возможно в Equals для float-а уже предусмотрели проблему с погрешностью флоата.
Не не предусмотрели, я что-то тоже проморгал. Скопировал этот метод из декомпилированного Vector3 из UnityEngine.dll

Просто раньше я видел этот метод и он был примерно таким, как ты написал.

UPD: Поправил.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 14:27   #23
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Написал c# враппер

Pax, снова придрусь к стилю, но почему используются аксессоры с маленькой буквы, это чтобы разделить статические от не статических? Просто выглядит наоборот, как будто normalized - это переменная, а X - это аксессор..
Хороший класс.

Можно было ещё аксессоры на сами x, y, z сделать, и событие Changed.
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 14:29   #24
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

Большинство из названий скопированы из декомпилированного класса Vector3 из UnityEngine.dll, собственно от сюда и имена такие.

PS: И это не класс, это структура. Т.к. с векторами придется работать часто, то они должны уничтожаться сразу после выхода из области видимости, а не ждать сборщика.

UPD: добавил несколько комментариев в код класса
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (17.11.2011)
Старый 17.11.2011, 15:08   #25
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

MoKa внеси свой вклад.. замути deferred shading а я сейчас паралаксом занимаюсь для 1 источника света... надеюсь получится
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 16:18   #26
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

готов параллакс

Mesh cube = Mesh.CreateCube();
cube.Control.SetTexture("Rockwall_Diffuse.jpg", 0, 0);
cube.Control.SetTexture("Rockwall_normal.jpg", 0, 1);
cube.Control.SetTexture("Rockwall_Displace.jpg", 0, 2);
cube.ShaderEffect.SetParallax(camera, "parallax.fx");

во вложении шейдер

Вложения
Тип файла: zip parallax.zip (1.7 Кб, 363 просмотров)
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 17:13   #27
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

А дисплейс не лучше в альфе нормалмэпы хранить?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 17:14   #28
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Написал c# враппер

Сообщение от pax Посмотреть сообщение
А дисплейс не лучше в альфе нормалмэпы хранить?
хз я вообще не в курсе.. я доработал имеющийся чейто шейдер для другого движка.. но я заметил еще косяк.. перспектива дисплейса высчитывается если крутится куб. Если крутить камеру, а куб стоит, то дисплейс не считается (((
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 17:18   #29
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Написал c# враппер

Так там все должно зависеть от источника света, его попробуй подвигай.
Собственно координаты камеры и источника света надо обновлять каждый кадр в шейдере.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 17:20   #30
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Написал c# враппер

Кручение камеры (Rotate) никак не должно влиять на смещение для параллакса. Только позиция влияет на это, т.к. ты ведь определяешь перспективу с точки зрения до пикселя, и тут поворот камеры не важен.
Насчёт освещения, тут всё просто - то же самое, только вычислять его нада после уже смещений, т.к. смещать нужно как diffuse так и normal карты.

Вот делал давно, шейдер не очень оптимизирован, и стиль совсем убогий был: http://moka.ucoz.ru/load/0-0-0-84-20
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:27.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com