forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Написал c# враппер (http://forum.boolean.name/showthread.php?t=15832)

pozitiffcat 11.11.2011 22:28

Написал c# враппер
 
Написал враппер всех функций ксорса.. в чем фишка? В том, что тут все максимально ООП, и подключается одной dll к любым .NET языкам. Плюс я дорабатываю враппер своими функциями например:
Цитата:

XE.Shadows.SetAutoShadows(); - устанавливет автоматическую настройку теней (для ленивых).. прописав эту функцию после XE.Graphics.Graphics3D(), вам не нужно будет заботится о прописывании команд для теней, учтите что будут использоваться стандартные параметры, если же вы хотите настраивать под себя, вам придется, все прописывать вручную
На моем сайте http://malcdevelop.ru Видео и туториалы

HolyDel 14.11.2011 17:10

Ответ: Написал c# враппер
 
ну нормально, чё.

pax 14.11.2011 21:53

Ответ: Написал c# враппер
 
Посоветовал бы исправить метод equals на public override bool Equals(object obj), переопределить операторы == и != и метод public override int GetHashCode() для TEntity.

Да и как уже сказал MoKa - убрать префикс у классов.

pozitiffcat 14.11.2011 22:27

Ответ: Написал c# враппер
 
переопределить операторы == и !=
Я пробовал переопределять... но происходит зацикливание,
вот почему

if((first!=null) && (second!=null))//<<тут зацикливание
{
if(first._handle == second._handle) return true;
}
return false;

Префикс не уберу. Я хочу чтобы он остался. Это мой "загон"

Hurrit 14.11.2011 22:33

Ответ: Написал c# враппер
 
где пост Моки?

Dream 14.11.2011 22:35

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 209724)
переопределить операторы == и !=
Я пробовал переопределять... но происходит зацикливание,
вот почему

if((first!=null) && (second!=null))//<<тут зацикливание
{
if(first._handle == second._handle) return true;
}
return false;

Префикс не уберу. Я хочу чтобы он остался. Это мой "загон"

эм... не мешалобы подучить матчасть
http://blog.nguen.net/post191-override_equals.html
по поводу шанса null -
простой вариант -
Код:

class Test
        {
                public int X;
               
                public override bool Equals (object obj)
                {
                        if(obj is  Test)
                        {
                                return X==((Test)obj).X;
                        }
                        return base.Equals (obj);
                }
               
                public static bool operator==(Test obj,Test obj2)
                {
                        if(obj  is Test)
                        {
                               
                        return obj.Equals(obj2);
                        }
                        else if(obj2 is Test)
                        {
                                return obj2.Equals(obj);
                        }
                        return false;
                }
               
                public static bool operator!=(Test obj,Test obj2)
                {
                       
                        if(obj  is Test)
                        {
                               
                        return !obj.Equals(obj2);
                        }
                        else if(obj2 is Test)
                        {
                                return !obj2.Equals(obj);
                        }
                        return true;
                }
               
               
        }


moka 14.11.2011 22:39

Ответ: Написал c# враппер
 
Цитата:

Сообщение от Hurrit (Сообщение 209725)
где пост Моки?

Снёс оффтоп в другую тему: http://forum.boolean.name/showthread.php?t=15847

pax 14.11.2011 22:52

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 209724)
Префикс не уберу. Я хочу чтобы он остался. Это мой "загон"

Загонный "загон".

Еще:
xx для класса функций ксорса это как-то вообще. Для всех объектов, имеющих _handle надо было бы сделать базовый класс и наследовать все объекты от него. Не надо было бы переопределять equals везде.
Не вижу необходимости в класса с суффиксом s, это можно статическими методами сделать.

moka 14.11.2011 23:07

Ответ: Написал c# враппер
 
Кстати класс xx ты не объявил как статик, и при этом он содержит сами Interop ссылки на функции из библиотеки ксорса. Так вот, лучше наименовать его Interop например, или Functions. Использоваться он должен всё равно только интернально в библиотеке, поэтому ему ещё и видимость нада internal а также объявить его в именном пространстве свойственному к библиотеке.

Вообще архитектурно кривостей Очень много..

pax 15.11.2011 00:01

Ответ: Написал c# враппер
 
Вложений: 1
Переименовал на сколько сил хватило...

pozitiffcat 15.11.2011 00:18

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pax (Сообщение 209743)
Переименовал на сколько сил хватило...

эх.. а смысл.. если как обычно. говно

pax 15.11.2011 00:20

Ответ: Написал c# враппер
 
А просто так)

pozitiffcat 15.11.2011 11:32

Ответ: Написал c# враппер
 
И всетаки неплохо получилось.. то что ты переименовал, я оставлю так.. изменю кое что что предложил Мока. Сделаю на HashTable сохранение всех созданных энтити и сюрфейсов, текстур, брашей.. короче всего где есть хэндл, и брать оттуда если уже существует

pax 15.11.2011 11:55

Ответ: Написал c# враппер
 
Я там еще удалил из XE ссылки на объекты с окончанием s. А сами объекты сделал статическими...

Кстати не хватает энамов для констант шейдеров...

pozitiffcat 15.11.2011 12:26

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pax (Сообщение 209772)
Я там еще удалил из XE ссылки на объекты с окончанием s. А сами объекты сделал статическими...

Кстати не хватает энамов для констант шейдеров...

чет голова не варит, а какие там константы, матрицы чтоль? Их наверно невозможно будет завернуть в енум для использования в функции, придется делать константами в классе

pax 15.11.2011 12:37

Ответ: Написал c# враппер
 
Да вроде матрицы, может еще чего

pozitiffcat 15.11.2011 14:12

Ответ: Написал c# враппер
 
Обновлено 15.11.2011 13:10
Изменена структура (спасибо pax)
Добавлена структура enum KeyCodes
Добавлены статические D3DXMATRIX - типы
Изменена функция SetEffectMatrix, в качестве value она принимает D3DXMATRIX
Улучшена организация памяти, добавлены hashTables для наиболее распространенных типов объектов Entity, Surface, Brush, Texture, World
По всем косякам обращаться ко мне =). Кстати там непонятка, например D3DXMATRIX EntityMatrix тоже тип d3dxmatrix который хранит в себе хэндл.. следовательно я матрицу из энтити могу запихнуть в SetEffectMatrix, это правильно?

pozitiffcat 16.11.2011 23:00

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

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


Люди. Кто знает если в максе создать анимированную модель на сцене, загрузить эту сцену with childs, найти анимационный entity. Будет ли он играть анимацию?

pax 17.11.2011 11:51

Ответ: Написал c# враппер
 
Я бы сделал вот такую реализацию Vector3:
PHP код:

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;
        }


    }



pozitiffcat 17.11.2011 12:38

Ответ: Написал c# враппер
 
Половину математических функций я не понял, но все равно да будет так )))
Блин не получается запилить deferred shading. Без этого шейдера, вся графика отстает на 10 лет

HolyDel 17.11.2011 12:53

Ответ: Написал c# враппер
 
я бы Equals сделал лучше так:
Цитата:

public bool Equals(Vector3 other)
{
return (other-this).sqrmagnitude < eps;
}
, хотя возможно в Equals для float-а уже предусмотрели проблему с погрешностью флоата.

pax 17.11.2011 13:03

Ответ: Написал c# враппер
 
Цитата:

Сообщение от HolyDel (Сообщение 210073)
хотя возможно в Equals для float-а уже предусмотрели проблему с погрешностью флоата.

Не не предусмотрели, я что-то тоже проморгал. Скопировал этот метод из декомпилированного Vector3 из UnityEngine.dll

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

UPD: Поправил.

moka 17.11.2011 14:27

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

Можно было ещё аксессоры на сами x, y, z сделать, и событие Changed.

pax 17.11.2011 14:29

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

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

UPD: добавил несколько комментариев в код класса

pozitiffcat 17.11.2011 15:08

Ответ: Написал c# враппер
 
MoKa внеси свой вклад.. замути deferred shading :-D а я сейчас паралаксом занимаюсь для 1 источника света... надеюсь получится

pozitiffcat 17.11.2011 16:18

Ответ: Написал c# враппер
 
Вложений: 1
готов параллакс

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");

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


pax 17.11.2011 17:13

Ответ: Написал c# враппер
 
А дисплейс не лучше в альфе нормалмэпы хранить?

pozitiffcat 17.11.2011 17:14

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pax (Сообщение 210112)
А дисплейс не лучше в альфе нормалмэпы хранить?

хз я вообще не в курсе.. я доработал имеющийся чейто шейдер для другого движка.. но я заметил еще косяк.. перспектива дисплейса высчитывается если крутится куб. Если крутить камеру, а куб стоит, то дисплейс не считается (((

pax 17.11.2011 17:18

Ответ: Написал c# враппер
 
Так там все должно зависеть от источника света, его попробуй подвигай.
Собственно координаты камеры и источника света надо обновлять каждый кадр в шейдере.

moka 17.11.2011 17:20

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

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

pozitiffcat 17.11.2011 17:29

Ответ: Написал c# враппер
 
Если камера стоит на месте и двигается объект то перспектива в дисплейсе изменяется правильно, если двигается камера, то дисплейс на объекте не считается

moka 17.11.2011 17:35

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 210118)
Если камера стоит на месте и двигается объект то перспектива в дисплейсе изменяется правильно, если двигается камера, то дисплейс на объекте не считается

У тебя в шейдере семантика позиции камеры не привязана:
Код:

// camera data
float3 cameraPosition;

А надо:
Код:

// camera data
float3 cameraPosition : CAMERA_POSITION;


pozitiffcat 17.11.2011 17:39

Ответ: Написал c# враппер
 
я ее в коде программы привязываю с камерой
Черт. похоже я дурак.. и ведь правда заработало.. а нахер я тогда в коде позиции камеры передаю

moka 17.11.2011 17:42

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 210121)
я ее в коде программы привязываю с камерой
Черт. похоже я дурак.. и ведь правда заработало.. а нахер я тогда в коде позиции камеры передаю

Хм, выглядит что юзаешь вектор основанный на вычислениях исходя из позиций, но только xy каналы, как-то странновато.
Глянь тот что я запостил.

pozitiffcat 17.11.2011 22:03

Ответ: Написал c# враппер
 
Изменения в XeEditorе. Возможность назначать паралакс. Возможность выбрать текстуру из списка, а не вводом файла вручную. Возможность настроить джоинты.

moka 17.11.2011 22:07

Ответ: Написал c# враппер
 
Раз ты делаешь материалы, то как будет организовано их применение в игровом движке который будет грузить твои карты?
Ты предоставишь API?

Также если кто-то хочет свой шейдер, и настроить его? Ты не с того конца пошёл, система материалов должна предоставлять возможность ими управлять, и каждый материал бамп или параллакс должен быть реализован на этой системе материалов, и должна быть возможность импорта и экспорта файла материала.
Иначи пользы от твоих параллаксов никакой, и ты уже не редактором занимаешься..

pozitiffcat 17.11.2011 22:20

Ответ: Написал c# враппер
 
в враппере предусмотрена загрузка стандартного шейдера бама параллакса блума... я не расчитываю на большую гибкость... программист может ручками найти объект и прописать для него свой файл шейдера. Редактор лишь предоставляет стандартные возможности. И физика. Что я хочу сделать. Это возможность настройки видимости объекта, альфы прочих стандартных мелочей. И подумываю о том что бы сохранять позицию камеры. А так... впринципе что задумал то и реализовал. Единственное что я хотел сделать еще, это чтобы несколько объектов, можно было объединить в один физический. Не имеется в виду приаттачить меши, а настроить физику так, чтобы несколько объектов считались одним, но я пока не понял можно ли это сделать на ксорсе.

.Squid 17.11.2011 22:51

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 210167)
Единственное что я хотел сделать еще, это чтобы несколько объектов, можно было объединить в один физический. Не имеется в виду приаттачить меши, а настроить физику так, чтобы несколько объектов считались одним, но я пока не понял можно ли это сделать на ксорсе.

Цепляешь все свои энтити к пивоту. На пивот вешаешь физическое тело и масштабируешь его с помощью xEntityBodyLocalScale.

pozitiffcat 18.11.2011 10:56

Ответ: Написал c# враппер
 
Вложений: 1
Внедряю HDR
до

после

.Squid 18.11.2011 13:35

Ответ: Написал c# враппер
 
Ты действительно считаешь, что HDR и Bloom - это одно и то же?

pozitiffcat 18.11.2011 14:13

Ответ: Написал c# враппер
 
Нет. Там есть свойство Thresold езменение его значения будет влиять как обработать картинку, с засвечиванием или с затенением

PS. На скрине.. я совместил bloom и HDR

pozitiffcat 18.11.2011 14:56

Ответ: Написал c# враппер
 
Добавил рендер из дополнительной камеры в текстуру одной функцией
memoryCam.RenderToTexture(memTex);

moka 18.11.2011 17:56

Ответ: Написал c# враппер
 
А где главный аттрибут HDR'а - exposure? Его реализация уже не такая и простая - нужно вычислить общую яркость картинки, и на основе её, смещать радиус затенения и засветления на картинки. При этом без HDR текстур, это будет очень "грубо", хотя можно и добиться нормального эффекта, как например в MW2, там супер была реализована exposure, корректно окна засветляли, а выходя на улицу, "адаптировался" глаз.
HDR - это сложная смесь, а не просто блум и коррекция цвета.

pozitiffcat 18.11.2011 19:46

Ответ: Написал c# враппер
 
да с выходом на свет, спеццэффект было бы ваще супер, автокоррекция типа. я даже не представляю как это называется и как это сделать

moka 18.11.2011 19:55

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pozitiffcat (Сообщение 210245)
да с выходом на свет, спеццэффект было бы ваще супер, автокоррекция типа. я даже не представляю как это называется и как это сделать

Цитата:

Сообщение от MoKa (Сообщение 210242)
А где главный аттрибут HDR'а - exposure? Его реализация уже не такая и простая - нужно вычислить общую яркость картинки, и на основе её, смещать радиус затенения и засветления на картинки. При этом без HDR текстур, это будет очень "грубо", хотя можно и добиться нормального эффекта, как например в MW2, там супер была реализована exposure, корректно окна засветляли, а выходя на улицу, "адаптировался" глаз.
HDR - это сложная смесь, а не просто блум и коррекция цвета.

Гугл:
1
2
3

impersonalis 28.12.2011 22:57

Ответ: Написал c# враппер
 
тред по диагонали читал, ибо
ЧТО Ж ВЫ ДЕЛАИТИ!!
1) Реализация функции-члена сразу после объявления в классе? Нет пути - юзай inline для подстановки.
2) Передача аргумента не по ссылке в реализации перегрузки копирования(рекурсия) /сравнения ? И где уже const-ы для методов и некоторых их аргументов?
3) Компоненты вектора в паблике?! Если у вас перегрузка сделана как функция поддержки, то объявите её дружественной классу - не уродуйте интерфейс!

4?) Заодно я не очень понял преимущество делать столько статических функций-членов. Большая часть из них вполне логически могла бы быть нестатическими.
Прошу прощения, если не прав и кого-то обидел.

А идея, наверно, неплохая - да.

апд: :-D только не говорите, что вы обсуждали C#-код, и C++ные придирки неактуальны :''((

pozitiffcat 28.12.2011 23:38

Ответ: Написал c# враппер
 
Цитата:

апд: только не говорите, что вы обсуждали C#-код, и C++ные придирки неактуальны
да не впринципе ты в чем то прав, писать нужно грамотно, но нет смысла рефракторить ибо мертво
ЗЫ. а разве в шарпе есть inline и оно актуально?

Dream 29.12.2011 16:22

Ответ: Написал c# враппер
 
передачи ссылок - актуально

pax 29.12.2011 17:11

Ответ: Написал c# враппер
 
Передача ссылок нужна только не для ссылочных типов.

Dream 29.12.2011 17:49

Ответ: Написал c# враппер
 
Цитата:

Сообщение от pax (Сообщение 215685)
Передача ссылок нужна только не для ссылочных типов.

эээ... я думал все и так поймут

impersonalis 29.12.2011 20:22

Ответ: Написал c# враппер
 
2 pax, SBJoker
Цитата:

Сообщение от pax (Сообщение 215685)
Передача ссылок нужна только не для ссылочных типов.

я вот про это:
Код:

Vector3 operator +(Vector3 one, Vector3 other)
не наю как на 4p (если не так - прошу извинить, и, по возможности, осветить механизм /можно в ЛС/),а на 2p, актуально (судя по телу, которое приведно)
Код:

Vector3 &operator +(const Vector3 &one,const Vector3 &other)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot