forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Блендинг при мультитекстурировании (http://forum.boolean.name/showthread.php?t=16120)

impersonalis 28.12.2011 18:41

Блендинг при мультитекстурировании
 
Вложений: 3
Код для Xors3D
Использую такие текстуры:
Вложение 15831Вложение 15832
Код:

#include <xors3d.h>

int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
    xAppTitle("sample");
        xGraphics3D(800, 600, 32, false, true);
        int camera = xCreateCamera();
        int cube = xCreateCube();
        xPositionEntity(cube,0,0,5);

        int tex0=xLoadTexture("0.bmp");
        int tex1=xLoadTexture("1.bmp",FLAGS_MASKED);

    xTextureBlend(tex0,TEXBLEND_ALPHA);
        xTextureBlend(tex1,TEXBLEND_ALPHA);

    xEntityTexture(cube,tex0,0,0);
        xEntityTexture(cube,tex1,0,1);

        while(!xKeyDown(1) || xWinMessage("WM_CLOSE"))
        {
            xRenderWorld();
            xFlip();
        }
    return 0;
}

Получаю (проверил на разных машинах)
Вложение 15833
ЧЯДНТ?:4to: Я ожидал, что данный код нарисует жёлтую кракозябру поверх нижней картинки.

ABTOMAT 28.12.2011 18:46

Ответ: Блендинг при мультитекстурировании
 
xTextureBlend(tex1,TEXBLEND_MULTIPLY);

(ну или хз какая там константа для Мультиплай)

impersonalis 28.12.2011 18:50

Ответ: Блендинг при мультитекстурировании
 
Это другой режим смешивания (будет выведена красная кракозябра)
http://help.boolean.name/commands/3d...xtureBlend.htm мне нужен аналог флага 1

dsd 28.12.2011 19:01

Ответ: Блендинг при мультитекстурировании
 
Вложений: 1


Код:

int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
    xAppTitle("sample");
        xGraphics3D(800, 600, 32, false, true);
        int camera = xCreateCamera();
        int cube = xCreateCube();
        xPositionEntity(cube,0,0,5);

        int tex0=xLoadTexture("0.jpg");
        int tex1=xLoadTexture("1.png");

        xTextureBlend(tex1,TEXBLEND_ALPHA);

    xEntityTexture(cube,tex0,0,0);
        xEntityTexture(cube,tex1,0,1);

        while(!xKeyDown(1) || xWinMessage("WM_CLOSE"))
        {
            xRenderWorld();
            xFlip();
        }
    return 0;
}

А почему с бмп не работает я не знаю

impersonalis 28.12.2011 19:12

Ответ: Блендинг при мультитекстурировании
 
Действительно. При использовании ПНГ отпадает надобность и в флаге FLAGS_MASKED при загрузке. Рисуется всё как я хотел.

moka 08.01.2012 06:05

Ответ: Блендинг при мультитекстурировании
 
Потому что для ALPHA бленда используется четвёртый канал Alpha как параметр бленда. (sRGB * (1.0 - dA)) + (dRGB * dA) - псевдо объяснение, я с мат. знаниями олень, так что думаю хоть так понятно.
BMP - не поддерживает альфа каналов (там только 3 канала на пиксель сохраняется), а GIF, PNG и DSS держат Alpha канал без проблем. При этом GIF лишь как маску (1 бит на альфа канал), а PNG как полноценный канал - 8 бит или в зависимости от выбранного под формата.

impersonalis 28.09.2012 16:22

Ответ: Блендинг при мультитекстурировании
 
Вложений: 2
Снова проблема. Есть две текстуры: вертикальная белая линия на альфаканале и горизонтальная белая линия на альфаканале. Требуется наложить их на куб, так чтобы получилось перекрестие.
Какие только эффекты я не получал (когда уже отчаялся и перешёл к брутфорсу - хотя казалось бы multyply должно было хватить), включая логическое И, нужного добиться не удалось.
Смятение вносит и предыдущие разбирательства (см.выше) в которых показана рудиментарность флага FLAGS_MASKED.
Код:

#include <xors3d.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <iostream>

using namespace std;

int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
    xAppTitle("sample");
        xGraphics3D(800, 600, 32, false, true);
        int camera = xCreateCamera();
        xCameraClsColor(camera,0,100,0);


    int cube=xCreateCube();
    xPositionEntity(cube,0,0,5);


    int tex0=xLoadTexture("horz_line.png",FLAGS_MASKED);
    int tex1=xLoadTexture("vert_line.png",FLAGS_MASKED);

    xTextureBlend(tex0,??);
    xTextureBlend(tex1,??);

    xEntityTexture(cube,tex0,0,0);
    xEntityTexture(cube,tex1,0,1);

        while(!xKeyHit(1) || xWinMessage("WM_CLOSE"))
        {

            xRenderWorld();
            xFlip();
        }

    return 0;
}

Спасибо.

dsd 28.09.2012 21:29

Ответ: Блендинг при мультитекстурировании
 
шейдер? в котором будет проверятся что бы пиксель был не прозрачным хотя бы в одной картинке и тогда не дискард.

или так :-D

Код:

#include <xors3d.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <iostream>

using namespace std;

int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
    xAppTitle("sample");
        xGraphics3D(800, 600, 32, false, true);
        int camera = xCreateCamera();
        xCameraClsColor(camera,0,100,0);


    int cube0=xCreateCube();
    xPositionEntity(cube0,0,0,5);
    int cube1=xCreateCube();
    xPositionEntity(cube1,0,0,5);


    int tex0=xLoadTexture("horz_line.png",2);
    int tex1=xLoadTexture("vert_line.png",2);

    xEntityTexture(cube0,tex0,0,0);
    xEntityTexture(cube1,tex1,0,0);

        while(!xKeyHit(1) || xWinMessage("WM_CLOSE"))
        {

            xRenderWorld();
            xFlip();
        }

    return 0;
}


impersonalis 29.09.2012 01:54

Ответ: Блендинг при мультитекстурировании
 
Ну тада уж спрайты. Ок.


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

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