» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[新闻] John Carmack 离开 id Software

megaTexture在doom3里就有。。。
实现起来不难。。
我猜id的megaTexture是包含了整套美术工具。。
所以到rage里才拿来说。。


来源 https://github.com/TTimo/doom3.gpl
/*
===========================================================================

Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.

This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).  

Doom 3 Source Code is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Doom 3 Source Code is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.

In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.

If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.

===========================================================================
*/

class idTextureTile {
public:
        int                x, y;
};

static const int TILE_PER_LEVEL = 4;
static const int MAX_MEGA_CHANNELS = 3;                // normal, diffuse, specular
static const int MAX_LEVELS = 12;
static const int MAX_LEVEL_WIDTH = 512;
static const int TILE_SIZE = MAX_LEVEL_WIDTH / TILE_PER_LEVEL;

class        idMegaTexture;

class idTextureLevel {
public:
        idMegaTexture        *mega;

        int                                tileOffset;
        int                                tilesWide;
        int                                tilesHigh;

        idImage                        *image;
        idTextureTile        tileMap[TILE_PER_LEVEL][TILE_PER_LEVEL];

        float                        parms[4];

        void                        UpdateForCenter( float center[2] );
        void                        UpdateTile( int localX, int localY, int globalX, int globalY );
        void                        Invalidate();
};

typedef struct {
        int                tileSize;
        int                tilesWide;
        int                tilesHigh;
} megaTextureHeader_t;


class idMegaTexture {
public:
        bool        InitFromMegaFile( const char *fileBase );
        void        SetMappingForSurface( const srfTriangles_t *tri );        // analyzes xyz and st to create a mapping
        void        BindForViewOrigin( const idVec3 origin );        // binds images and sets program parameters
        void        Unbind();                                                                // removes texture bindings

        static        void MakeMegaTexture_f( const idCmdArgs &args );
private:
friend class idTextureLevel;
        void        SetViewOrigin( const idVec3 origin );
        static void        GenerateMegaMipMaps( megaTextureHeader_t *header, idFile *file );
        static void        GenerateMegaPreview( const char *fileName );

        idFile                        *fileHandle;

        const srfTriangles_t *currentTriMapping;

        idVec3                        currentViewOrigin;

        float                        localViewToTextureCenter[2][4];

        int                                numLevels;
        idTextureLevel        levels[MAX_LEVELS];                                // 0 is the highest resolution
        megaTextureHeader_t        header;

        static idCVar        r_megaTextureLevel;
        static idCVar        r_showMegaTexture;
        static idCVar        r_showMegaTextureLabels;
        static idCVar        r_skipMegaTexture;
        static idCVar        r_terrainScale;
};

[ 本帖最后由 风间星魂 于 2013-11-23 16:03 编辑 ]


TOP

引用:
原帖由 Nemo_theCaptain 于 2013-11-23 14:09 发表

Rage还没公布源代码
id之前的作品Doom3、Quake3代码写的都很整洁美观倒是真的

Rage就是一个全靠美工的游戏,动态特效几乎没有,视觉效果全是贴图,因为贴图分辨率太大,还有载入延迟的问题
PC和主机版除了分辨 ...
。。。。这个世界上有叫mmap或者/dev/shm的东西。。。
显存带宽也不是个问题,这个技术每帧sub一个屏幕的mipmap。要啥自行车?
在ps3和x360上确实不合适,内存太小。。
ps4很适合这玩意。。

[ 本帖最后由 风间星魂 于 2013-11-23 16:14 编辑 ]



TOP

不知道id tech5的源码还有没机会出来。。
哎,


TOP

发新话题
     
官方公众号及微博