![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
OpenGL.
Собственно, у меня реализовано следующим образом:
Похоже, что код работает неправильно. Где может быть ошибка? Или как более эффективно можно это реализовать? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Разве в OpenGL нет функции, загружающей битмап ? Или хотя бы какую-нибудь библиотеку типа devIL поюзать.
-------------------- ![]() |
|||
|
||||
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Нет. Да и мне потом понадобится другие форматы грузить. Мне сейчас хотя бы в любом формате бы сделать.
|
|||
|
||||
| $tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
А почему ты для этого используешь именно .NET. Может тебе правда лучше будет другую, более удобную графическую библу. Или же совсем перейти на .NET. Возможно помесь управляемого и неуправляемого кода и глючит.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Не совсем понимаю, чем синтаксически указатель в C++/CLI отличается от ссылки на объект (и там и там используется * ), но можно залочить битмап (LockBits, с указанием формата пикселов) и работать с ним через указатель на буфер (адрес в BitmapData.Scan0) - так будет в десятки (если не больше) раз быстрее, чем через Get/SetPixel. И вместо StringToHGlobalAnsi можно юзать тот же буфер, что возвращает LockBits, кстати.
-------------------- ![]() |
|||
|
||||
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Про LockBits спасибо. А как это для String сделать, он же вроде специализировано только для Bitmap сделан? А StringToHGlobalAnsi - это из мсдн, там написано так в char * переводить...
Ещё про LockBits. Битмап в .net хранится в формате ARGB, но в OpenGL такого формата нет! Что тут можно сделать? И вообще тот код в принципе верен, или нет? [quote]Не совсем понимаю, чем синтаксически указатель в C++/CLI отличается от ссылки на объект (и там и там используется * )[/qoute] Ссылка (обозначение: &) - автоматически разименовываемый указатель. |
|||
|
||||
| Dmitriy_Donetsk |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 28.9.2006 Репутация: нет Всего: нет |
||||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Строки в дотнет - это не то, что нужно в данном случае. Правильней юзать битмап в паре с unmanaged буфером (IntPtr), на крайняк - с массивом, меньше потерь на перевод из/в юникод при операциях со стрингом.
это к чему ? Это я знаю, с С++ знаком Другое имел ввиду:
Это что - ссылка ? Или указатель, как в обычном С++ ? Просто к примеру в шарпе указатель это указатель, а ссылка это ссылка. А в С++/CLI похоже понятия слегка слились, т.к. сказать про bmp что это указатель и например кастовать его в void*... хм-м... можно ли ? -------------------- ![]() |
||||||
|
|||||||
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Понял, в связи с чем у тебя вопросы по строке. Я закоментированные строки вырезал. Раньше я преобразовывал String *filename в char *fn, чтобы передать неуправляемой функции, сейчас же эти преобразования, конечно, пустая трата ресурсов компа... (И строк в посте
В 2003ей Студии - да. Указатели и ссылки в ней такие же как и в обычном С++ (в 2005ой, по умолчанию, уже нет, но я не на ней пишу). Тут две проблемы с конвертом к void*: 1) Если к неуправляемому типу, то надо юзать __pin, да и не всегда и это выручает (пример строк, где только через Маршалинг). 2) Drawing::Bitmap - класс, так что там не только массив цветов в argb формате лежит... Вообще, у меня сейчас появилась такая мысль: загружу тот же битмап таким же образом и отображу на форме 2мя способами. Сразу будет видно, тут ли собака зарыта. Отпишусь, как сделаю. |
|||
|
||||
| Arks |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Так, руки наконец-то дошли до этого...
Попробовал загружать один и тот же битмап двумя способами: 1) на PictureBox 2) в массив (в формат rgb), потом на форму рисовать. К сожалению не нашёл ничего похожего на DrawPoint или PutPixel... Так что записывал в другой битмап и на другой PictureBox.
Обе картинки одинаковые. Но самое интерес
Оба PictureBox'a всё равно отображают одну и ту же картинку. Т.е. никаких различий! Либо я совсем туп, либо студия там чего мутит сама... Ну да ладно. Вернусь к месту, где всё это загружаю. В функции glTexImage2D я указал GL_UNSIGNED_BYTE, хотя массив pxls в unsigned int... Результат: ![]() Если же поменять на GL_UNSIGNED_INT, как и следовало бы по идее, то ничего не рисуется вообще А должно быть так: ![]() П.С.: А DevIL, что ранее упоминался бесплатный? Это сообщение отредактировал(а) Arks - 15.10.2006, 12:22 |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Arks, что-то ты намутил с форматом цветов.
абсолютно бесплатный (лицензия GNU LGPL) http://openil.sourceforge.net/ порт под .NET -------------------- ![]() |
|||
|
||||
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Спасибо большое.
Попробую девилом сделать. |
|||
|
||||
| Arks |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Всё ништяк. Правда, пришлось кучу багов в других местах также пофиксить
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |