private static BSPTexture ResizeTextures(BSPTexture texture, Vector2 size) { int width = (int)size.x; int height = (int)size.y; if (texture.width > width && texture.height > height) { return(texture); } byte[] data = new byte[width * height * 4]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { int rx = x % texture.width; int ry = y % texture.height; int srcIndex = 4 * (y * width + x); int dstIndex = 4 * (ry * texture.width + rx); data[srcIndex] = texture.data[dstIndex]; data[srcIndex + 1] = texture.data[dstIndex + 1]; data[srcIndex + 2] = texture.data[dstIndex + 2]; data[srcIndex + 3] = texture.data[dstIndex + 3]; } } return(new BSPTexture(texture.name, data, width, height)); }
private static BSPTexture[] AdjustTextureSizes(BSPFile bsp) { var textures = bsp.textures; var sizes = new Vector2[textures.Length]; foreach (var geometry in bsp.models[0].geometries) { var g = geometry.mesh; var tex_id = geometry.tex_id; var texture = textures[tex_id]; for (int i = 0; i < g.vertices.Length; ++i) { var uv = g.uvs[i]; float w = texture.width * uv.x; float h = texture.height * uv.y; if (w > sizes[tex_id].x || h > sizes[tex_id].y) { sizes[tex_id] = new Vector2(w, h); } } } var result = new BSPTexture[textures.Length]; for (int i = 0; i < sizes.Length; ++i) { result[i] = ResizeTextures(textures[i], sizes[i]); } return(result); }
void ReadTextures(DataStream ds) { textures = new BSPTexture[miptex_directory.Length]; for (int i = 0; i < miptex_directory.Length; ++i) { var entry = this.miptex_directory[i]; var image_data = ImageUtil.getImageData(entry.name, ds, entry); var data = ImageUtil.expandImageData(image_data, PAL.DEFAULT_PALETTE); textures[i] = new BSPTexture(entry.name, data, image_data.width, image_data.height); } }
private BSPTexture[] expandSkins(ImageData[] skins) { var textures = new BSPTexture[skins.Length]; for (int i = 0; i < skins.Length; ++i) { var skin = skins[i]; var data = ImageUtil.expandImageData(skin, PAL.DEFAULT_PALETTE); textures[i] = new BSPTexture("skin-" + i, data, skin.width, skin.height); } return(textures); }
static Color32[] GetTexturePixels(BSPTexture t) { Color32[] pixels = new Color32[t.width * t.height]; for (int i = 0, j = 0; i < pixels.Length; ++i) { pixels[i] = new Color32(t.data[j++], t.data[j++], t.data[j++], t.data[j++]); } for (int x = 0; x < t.width; ++x) { for (int y = 0; y < t.height / 2; ++y) { int from = y * t.width + x; int to = (t.height - y - 1) * t.width + x; var temp = pixels[to]; pixels[to] = pixels[from]; pixels[from] = temp; } } return(pixels); }
public TextureAtlasEntry(BSPTexture texture, int x, int y) { this.texture = texture; this.x = x; this.y = y; }